将INT绑定到PDO准备的LIMIT和OFFSET语句时出现问题


Trouble binding INT to PDO prepared statement for LIMIT and OFFSET

我在将INT值绑定到我的PDO预处理语句时遇到了麻烦。它把int作为字符串传递,'' s等等。我需要在SQL查询中为我的LIMIT和OFFSET绑定int。

下面是我的代码:

$sth = $dbh->prepare("SELECT * FROM post WHERE private = 0 ORDER BY post_time DESC LIMIT :number_results OFFSET :offset");
$sth->execute(array(':number_results' => $number_results, ':offset' => $offset));
$errors = $sth->errorInfo();
    print_r($errors[2]);

我正在接收You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''20' OFFSET '0'' at line 1

我发现了这个bug报告,但是到目前为止还没有找到任何注释。如何绑定这些值?

编辑:当我试图设置参数类型,我没有得到任何错误,但它看起来不像它绑定正确的参数?

Params:  2
Key: Name: [15] :number_results
paramno=-1
name=[15] ":number_results"
is_param=1
param_type=1
Key: Name: [7] :offset
paramno=-1
name=[7] ":offset"
is_param=1
param_type=1

您可以使用bindParam绑定参数并指定数据类型。在你的情况下,你想告诉PDO的值是一个整数使用PDO::PARAM_INT

$sth = $dbh->prepare("SELECT * FROM post WHERE private = 0 ORDER BY post_time DESC LIMIT :number_results OFFSET :offset");
// Bind params
$sth->bindParam(':number_results', $number_results, PDO::PARAM_INT);
$sth->bindParam(':offset', $offset, PDO::PARAM_INT);
$sth->execute();
$errors = $sth->errorInfo();
    print_r($errors[2]); 

因为您已经单独指定了参数,所以不需要在$sth->execute();调用中将它们作为数组传递。