PHP PDO语句抛出致命错误

时间:2011-06-22 02:26:29

标签: 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行的/class.php中抛出#2 {main}

关于这意味着什么的想法?

1 个答案:

答案 0 :(得分:3)

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);    
    }

BTW:您的代码中存在SQL注入漏洞。使用参数化查询绑定$_user的值。