首页 >后端开发 >php教程 >PDO 可以处理 IN() 子句查询的数组绑定吗?

PDO 可以处理 IN() 子句查询的数组绑定吗?

DDD
DDD原创
2024-12-25 07:52:14585浏览

Can PDO Handle Array Binding for IN() Clause Queries?

可以使用 PDO 将数组绑定到 IN() 条件吗?

在 PDO 查询中使用数组来查询 IN() 条件可以可以通过手动为每个数组成员构建占位符来实现。以下是该过程的细分:

$ids       = [1, 2, 3, 7, 8, 9];
$inQuery    = str_repeat('?,', count($ids) - 1) . '?'; // generates ?,?,?,?,?,?

$stmt = $db->prepare("SELECT * FROM table WHERE id IN($inQuery)");
$stmt->execute($ids);
$data = $stmt->fetchAll();

使用 str_repeat 构造 $inQuery 变量以创建占位符列表。这可确保每个数组成员都有相应的占位符。

另一种方法是合并包含占位符及其关联值的数组。当查询中存在其他占位符时,此方法适用。

$arr = [1,2,3];
$in  = str_repeat('?,', count($arr) - 1) . '?';
$sql = "SELECT * FROM table WHERE foo=? AND column IN ($in) AND bar=? AND baz=?";
$stmt = $db->prepare($sql);
$params = array_merge([$foo], $arr, [$bar, $baz]);
$stmt->execute($params);
$data = $stmt->fetchAll();

命名占位符需要稍微不同的方法,您可以在其中创建相应的占位符序列,例如:id0,:id1,:id2。

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

$sql = "SELECT * FROM table WHERE foo=:foo AND id IN ($in) AND bar=:bar";
$stmt = $db->prepare($sql);
$stmt->execute(array_merge($params, $in_params));
$data = $stmt->fetchAll();

这些方法提供了一种安全有效的方法,可以通过 PDO 在 IN() 条件下使用数组。

以上是PDO 可以处理 IN() 子句查询的数组绑定吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn