PHP PDO语句引发致命错误

问题描述

|| 我有一个函数引发关于语法问题的异常错误。看一看。
public static function authenticate($_user,$_pass)
    {
        $sql = \'SELECT password,key 
                FROM users 
                WHERE username = \' . $_user;

        $stm = Db::init()->prepare($sql);
        if ($stm->execute())
            return $stm->fetch(PDO::FETCH_ASSOC);    
    }
  致命错误:带有消息\'sqlSTATE [42000]的未捕获异常\'PDOException \':语法错误或访问冲突:1064您的sql语法有错误;请联系我们。检查与您的MysqL服务器版本对应的手册以获取正确的语法,以在/class.PHP:111的第1行'\ key FROM users WHERE username = testuser1 \'附近使用      堆栈跟踪:   #0 /class.PHP(111):PDOStatement-> execute()   #1 /class.PHP(118):密码:: authenticate(\'testuser1 \',\'test \')   #111 {main}在第111行的/class.PHP中抛出 关于这意味着什么的想法?     

解决方法

        
key
是sql中的保留字。在查询中用反引号将其引起来。像这样:
public static function authenticate($_user,$_pass)
    {
        $sql = \'SELECT password,`key` 
                FROM users 
                WHERE username = \' . $_user;

        $stm = Db::init()->prepare($sql);
        if ($stm->execute())
            return $stm->fetch(PDO::FETCH_ASSOC);    
    }
顺便说一句:您的代码中存在一个SQL注入漏洞。使用参数化查询绑定“ 3”的值。