Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数组中带有占位符的PDO mysql限制_Php_Mysql_Pdo - Fatal编程技术网

Php 数组中带有占位符的PDO mysql限制

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

这是关于限制条款和PDO的又一个问题,但我在其他地方找不到解决方案

我得到一个PDO错误,我很清楚为什么

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

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

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

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。已尝试设置属性,但驱动程序不支持该属性。不过还是不错的尝试。