首頁 >後端開發 >php教程 >如何在 PHP 中正確使用 PDO 與 IN 子句和陣列?

如何在 PHP 中正確使用 PDO 與 IN 子句和陣列?

Susan Sarandon
Susan Sarandon原創
2024-12-19 10:06:14784瀏覽

How to Correctly Use PDO with an IN Clause and an Array in PHP?

PHP - 將 PDO 與 IN 子句數組結合使用

PDO 允許您執行包含具有值數組的 IN 子句的 SQL 語句。雖然此方法適用於字串連接 (implode()),但在使用佔位符時可能會導致問題。

識別問題

以下程式碼使用佔位符,不會傳回所有預期的項目:

$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));
$my_results = $my_result->fetchAll();

此程式碼僅傳回所有預期的項目:

此程式碼只傳回所有預期的項目:

此程式碼只傳回所有預期的項目:

$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);
$data = $stm->fetchAll();

此程式碼只回傳my_value 等於的項目$in_array 中的第一個元素(1),而不是其他元素(2 和3)。

位置佔位符的解決方案

$ids = [1,2,3];
$in = "";
$i = 0;
foreach ($ids as $item)
{
    $key = ":id" . $i++;
    $in .= ($in ? "," : "") . $key; // :id0,:id1,:id2
    $in_params[$key] = $item; // collecting values into a key-value array
}

$sql = "SELECT * FROM table WHERE foo=:foo AND id IN ($in) AND bar=:bar";
$stm = $db->prepare($sql);
$stm->execute(array_merge(["foo" => "foo", "bar" => "bar"], $in_params)); // merge two arrays
$data = $stm->fetchAll();
PDO 需要動態建立具有佔位符的字串並將其插入查詢中,同時像往常一樣綁定數組值。對於位置佔位符,此解決方案有效:

命名佔位符解決方案命名佔位符的方法涉及創建一系列佔位符符(例如:id0、 :id1, :id2) 並將值收集到鍵值數組中。以下是一個範例:透過遵循這些解決方案,您可以成功地將 PDO 與包含值陣列的 IN 子句結合使用。

以上是如何在 PHP 中正確使用 PDO 與 IN 子句和陣列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn