我无法将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
答案 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();
来电中将其作为数组传递。