MySQL LIMIT子句中的语法错误

时间:2014-11-05 16:07:31

标签: mysql sql-limit

我遇到查询问题:

$sth = $Db->dbh->prepare(
   "SELECT * 
   FROM loader 
   WHERE download = 0 
    AND lastconnected BETWEEN DATE_SUB(NOW(),INTERVAL 15 MINUTE) AND NOW() 
   ORDER BY lastconnected DESC 
   LIMIT :amount");

由于某些原因LIMIT无法正常工作,如果我更改:相当于一个硬编码的数字,它会起作用,但一旦我将其用作:数量它会给我这个错误:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''1'' at line 5

这是我用来执行准备好的查询的原因:

$sth->execute(array(':amount' => $amount));

现在试图弄清楚几个小时了。希望有人可以看到我不喜欢的东西。

1 个答案:

答案 0 :(得分:0)

如果您将变量LIMIT与PDO一起使用,则必须使用PDOStatement::bindParam()绑定每个参数,并明确指定参数的值具有整数类型(PDO::PARAM_INT)。带有输入参数值数组的PDOStatement::execute()将所有值视为字符串(PDO::PARAM_STR),而不是实际的PHP类型,调用PDOStatement::bindParam()时没有类型,但是MySQL LIMIT keyword不接受字符串参数。这在the manual page for the method PDOStatement::execute()中有记录,并且有一个开放的feature request to change the behavior