这是关于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);
答案 0 :(得分:1)
不应使用数组参数调用execute()
,而应该能够循环$param
并在执行之前将值一次绑定为INT。
$stmt = $ulink->prepare($sql);
$i = 1;
foreach ($param as $value) {
$stmt->bindValue($i++, $value, PDO::PARAM_INT);
}
$stmt->execute();