首頁 >後端開發 >php教程 >PDO 可以處理 IN() 子句查詢的陣列綁定嗎?

PDO 可以處理 IN() 子句查詢的陣列綁定嗎?

DDD
DDD原創
2024-12-25 07:52:14590瀏覽

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