PDO mysql LIMIT与数组中的占位符

时间:2016-03-07 23:09:55

标签: php mysql pdo

这是关于LIMIT子句和PDO的另外一个,但我在其他地方找不到解决方案。

我收到了PDO错误,我完全知道为什么。

PDO在LIMIT子句中需要一个整数,但由于变量是作为给定参数数组的一部分包含的,因此PDO将所有变量视为字符串,因此错误。

问题是:如何设置它以避免错误?

一般信息,这是“加载更多”设置的一部分。

SQLSTATE[42000]: Syntax error or access violation

这是查询:

$param=array();
$param = array_merge($param,$geocities);
$param[] = $limit;
$param[] = $offset;
$in  = str_repeat('?,', count($geocities) - 1) . '?';
    $sql = "SELECT ads.*, cities.city  FROM ads
            INNER JOIN cities USING(city_id)
            WHERE cities.city_id IN ($in)
            AND ads.published IS NOT NULL
            AND ads.deleted IS NULL
            ORDER BY ad_id
            LIMIT ?
            OFFSET ?";
    $stmt = $ulink->prepare($sql);
    $stmt->execute($param);

1 个答案:

答案 0 :(得分:1)

不应使用数组参数调用execute(),而应该能够循环$param并在执行之前将值一次绑定为INT。

$stmt = $ulink->prepare($sql);
$i = 1;
foreach ($param as $value) {
    $stmt->bindValue($i++, $value, PDO::PARAM_INT);
}
$stmt->execute();