在phpmyadmin中,我可以通过SQL:运行
SELECT * FROM mytable WHERE `Bob's Stuff` > 1
但是,当我运行完全相同的查询时,一个php脚本:
$stmt->prepare("SELECT * FROM mytable WHERE `Bob's Stuff` > :int");
$stmt->bindValue(':int', $int);
$stmt->execute();
我得到这个错误:
致命错误:未捕获异常"PDOException",消息为'SQLSTATE[42000]:语法错误或访问冲突:1064您有SQL语法错误;查看与您的MySQL服务器版本中第10行":int AND
Bob's Stuff
>='1')"附近要使用的正确语法script.php:208堆栈跟踪:#0script.php(208):PDOStatement->execute()#1{main}抛出script.php第208行
如果将查询列更改为任何其他列名,则查询工作正常。
列名可以用撇号吗?
将列名也作为参数
$tableName = "`Bob''s Stuff`";
$stmt->prepare("SELECT * FROM mytable WHERE :tableName > :int");
$stmt->bindValue(':tableName', $tableName);
$stmt->bindValue(':int', $int);
$stmt->execute();
顺便说一下,一个建议是下次不要创建像Bob's Stuff
这样的列。把它做成一个像BobStuff
这样的单词。