首页 > 后端开发 > php教程 > 为什么在使用带有占位符数组的 IN 子句时 PDO 会返回意外结果?

为什么在使用带有占位符数组的 IN 子句时 PDO 会返回意外结果?

Barbara Streisand
发布: 2024-12-21 08:31:13
原创
947 人浏览过

Why Does PDO Return Unexpected Results When Using an IN Clause with an Array of Placeholders?

将 PDO 与 IN 子句数组一起使用 [重复]

问题:

当使用 PDO 执行带有使用数组的 IN 子句的语句时对于它的值,为什么这段代码返回一个意外的结果:

$in_array = array(1, 2, 3);
$in_values = implode(',', $in_array);
$my_result = $wbdb->prepare("SELECT * FROM my_table WHERE my_value IN (:in_values)");
$my_result->execute(array(':in_values' => $in_values));
登录后复制

答案:

PDO 难以处理使用值数组占位符的 IN 子句。要解决此问题,您需要动态创建一串占位符并将其插入到查询中,同时单独绑定数组值。

对于位置占位符:

$in  = str_repeat('?,', count($in_array) - 1) . '?';
$sql = "SELECT * FROM my_table WHERE my_value IN ($in)";
$stm = $db->prepare($sql);
$stm->execute($in_array);
登录后复制

对于命名占位符:

// collect parameters for query
$params = ["foo" => "foo", "bar" => "bar"];

// prepare IN clause placeholders and values
$ids = [1,2,3];
$in = "";
$i = 0;
foreach ($ids as $item) {
    $key = ":id" . $i++;
    $in .= ($in ? "," : "") . $key;
    $in_params[$key] = $item;
}

// construct query and execute
$sql = "SELECT * FROM table WHERE foo=:foo AND id IN ($in) AND bar=:bar";
$stm = $db->prepare($sql);
$stm->execute(array_merge($params, $in_params));
登录后复制

以上是为什么在使用带有占位符数组的 IN 子句时 PDO 会返回意外结果?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板