【发布时间】:2014-02-07 14:15:52
【问题描述】:
有人问过这个问题before。我有以下疑问
$start=150;
$sql='select * from articles where category=? limit ?,5';
$query=$con->prepare($sql)
$query->execute(array($_GET['category'],$start));
我收到错误消息(由于引用 150):
您的 SQL 语法有错误;查看 与您的 MySQL 服务器版本相对应的手册 在第 1 行的 ''150',5' 附近使用的语法。
这已被报告为错误,后来被关闭为虚假。我现在该怎么办?有任何解决方法吗?
编辑
为什么我没有遇到同样的问题,当我有类似的查询时
$sql='select * from articles where id=?';
$query=$con->prepare($sql);
$query->execute(array($id));
【问题讨论】:
-
@MichaelBerkowski:请参阅编辑
-
绑定
id=?时不是问题,因为MySQL 不在乎是否被引用。在LIMIT中使用它的解决方案在下面的答案和链接的问题中都确定是明确地bindParam()强制PDO::PARAM_INT而不是将数组传递给execute(),这将发送字符串(并引用它们) -
@MichaelBerkowski: 为什么如此特别。不应该在每种情况下行为都相同。在主键列的情况下引号是否可以接受,因为它可以代替
iduser_id并且它仍然适用于整数周围的引号? -
这是 MySQL 开发人员的问题。
LIMIT是特定于 MySQL 的,未在所有其他 RDBMS 中实现。如果您启用了模拟准备并在 PDO 中禁用它,您可能会得到不同的结果。