2

在 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 服务器版本相对应的手册,以Bob's Stuff在 script.php:208 的第 10 行的 ':int AND >= '1')' 附近使用正确的语法 堆栈跟踪:#0 script.php(208): PDOStatement->execute() #1 {main} 在第 208 行的 script.php 中抛出

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

是否可以有带撇号的列名?

4

1 回答 1

0

将该列名也作为参数,

$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

于 2012-09-08T09:57:22.373 回答