admin

PHP PDO选择名称中带有单引号的列

sql

在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}

如果我将查询列更改为任何其他列名,则查询工作正常。

列名是否可以带有撇号?


阅读 160

收藏
2021-06-07

共1个答案

admin

将该列名称也用作参数,

$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

2021-06-07