我遇到查询问题:
$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));
现在试图弄清楚几个小时了。希望有人可以看到我不喜欢的东西。
答案 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。