无法将INT绑定到PDO为LIMIT和OFFSET准备的语句

时间:2014-05-19 02:43:55

标签: php mysql pdo

我无法将INT值绑定到我的PDO预处理语句。它将INT作为字符串传递,''和所有。我需要在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

我发现了this错误报告,但到目前为止评论还没有运气。如何绑定这些值?

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

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

1 个答案:

答案 0 :(得分:1)

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

$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();来电中将其作为数组传递。