我正在使用PDO,并在使用以下代码时抛出错误:
$stmt = $pdo->prepare("SELECT username FROM users WHERE
WHERE INSTR(`games`, '{$gameid}') > 0
");
$gameid = $gamedata['id'];
$stmt->execute(array(
':gameid'=>$gameid
));
$players = $stmt->fetch(PDO::FETCH_ASSOC);
通过查看过去的答案,这应该有效,但是我遇到了以下错误:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax
error or access violation: 1064 You have an error in your SQL syntax; check the manual
that corresponds to your MySQL server version for the right syntax to use near 'WHERE
INSTR(`games`, 'crysis') > 0' at line 2' in C:\xampp\htdocs\gs\gamepage.php:19 Stack
trace: #0 C:\xampp\htdocs\gs\gamepage.php(19): PDOStatement->execute(Array) #1 {main}
thrown in C:\xampp\htdocs\gs\gamepage.php on line 19
它似乎也把'游戏'作为一个字面而不是列
我做错了什么?
答案 0 :(得分:1)
你有一个双WHERE
:
SELECT username FROM users WHERE
WHERE
您还在使用$gameid
做一些有趣的事情,即在替换后设置变量,并绑定未使用的:gameid
参数。您还有一个SQL注入漏洞,应该使用参数传递$gameid
而不是创建动态SQL。
答案 1 :(得分:1)
你有“后引号”包含的游戏,而不是{$ gameid}变量正在使用的“单引号”。它们可能使数据库引擎认为它是列名而不是文本。
答案 2 :(得分:1)
$stmt = $pdo->prepare('SELECT `username` FROM `users`
WHERE INSTR(`games`, :gameid) > 0;');
在执行查询之前,您应该使用$stmt->bindValue()
或$stmt->bindParameter()
。
如果gameid是...这将无法正常工作......整数! ? ! ?