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