我有一个函数,它会在语法问题上引发异常错误。看看。
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}
关于这意味着什么的想法?
答案 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
的值。