在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();
我收到此错误:
致命错误:消息“ SQLSTATE [42000]”未捕获的异常“ PDOException”:语法错误或访问冲突:1064 SQL语法有错误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以便Bob's Stuff在script.php:208中第10行的’:int AND > =‘1’)’附近使用:堆栈跟踪:#0 script.php(208):在第208行的script.php中抛出PDOStatement-> execute()#1 {main}
Bob's Stuff
如果我将查询列更改为任何其他列名,则查询工作正常。
列名是否可以带有撇号?
将该列名称也用作参数,
$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。
BobStuff