Php 数组中带有占位符的PDO mysql限制
这是关于限制条款和PDO的又一个问题,但我在其他地方找不到解决方案 我得到一个PDO错误,我很清楚为什么 PDO需要一个整数on LIMIT子句,但由于变量是作为给定参数数组的一部分包含的,PDO将所有变量都视为字符串,因此会产生错误 问题是:我如何设置它以避免错误 对于一般信息,这是“加载更多”设置的一部分Php 数组中带有占位符的PDO mysql限制,php,mysql,pdo,Php,Mysql,Pdo,这是关于限制条款和PDO的又一个问题,但我在其他地方找不到解决方案 我得到一个PDO错误,我很清楚为什么 PDO需要一个整数on LIMIT子句,但由于变量是作为给定参数数组的一部分包含的,PDO将所有变量都视为字符串,因此会产生错误 问题是:我如何设置它以避免错误 对于一般信息,这是“加载更多”设置的一部分 SQLSTATE[42000]:语法错误或访问冲突 以下是查询: $param=array(); $param = array_merge($param,$geocities); $par
SQLSTATE[42000]:语法错误或访问冲突
以下是查询:
$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()
$stmt = $ulink->prepare($sql);
$i = 1;
foreach ($param as $value) {
$stmt->bindValue($i++, $value, PDO::PARAM_INT);
}
$stmt->execute();
@曼尼尔,一点也不。我非常清楚如何限制一个值。这里的问题是占位符的使用,因此也是数组的使用。您的案例的示例代码由以下问题的答案给出:)由于数组中的所有参数都将被视为字符串,简单的答案是-您不能通过参数数组做您想做的事情。您必须通过bindValue
和指定适当的类型(PDO::PARAM_INT
)手动绑定它。或者,您可以尝试使用MySQL的CAST()
。我没有试过,所以我不知道它是否有效<代码>限制强制转换(?为无符号)
或类似的内容。@manniL。已尝试设置属性,但驱动程序不支持该属性。不过还是不错的尝试。