0

我在查询时遇到问题:

$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 由于某种原因不起作用,如果我将 :amount 更改为硬编码的数字,它就会起作用,但是一旦我将它用作 :amount 它就会给我这个错误:

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));

一直试图弄清楚几个小时。希望有人能看到我看不到的东西。

4

1 回答 1

0

如果您在LIMITPDO 中使用变量,则必须绑定每个参数PDOStatement::bindParam()并明确指定参数的值具有整数类型 ( PDO::PARAM_INT)。PDOStatement::execute()使用输入参数值数组将所有值视为字符串 ( PDO::PARAM_STR),而不是实际的 PHP 类型,就像没有类型的调用一样PDOStatement::bindParam(),但 MySQL 的LIMIT关键字不接受字符串参数。这在该方法的手册页中有PDOStatement::execute()记录,并且有一个开放的功能请求来更改行为

于 2014-11-05T16:11:46.807 回答