问题描述
||
我有一个函数引发关于语法问题的异常错误。看一看。
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”的值。