首頁 >後端開發 >php教程 >如何在 MySQL 的 `WHERE ... IN()` 子句中有效地使用具有陣列過濾器的預先準備語句?

如何在 MySQL 的 `WHERE ... IN()` 子句中有效地使用具有陣列過濾器的預先準備語句?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-16 16:33:11759瀏覽

How Can I Efficiently Use Prepared Statements with Array Filters in MySQL's `WHERE ... IN()` Clause?

使用陣列過濾器準備語句:'WHERE .. IN(..)'查詢

問題

考慮以下查詢,該查詢基於在特定ID 上:

SELECT * FROM somewhere WHERE `id` IN(1,5,18,25) ORDER BY `name`;

給定一個陣列要取得的ID ($ids),建議使用準備好的語句以提高效率。然而,使用循環迭代數組並分別綁定每個 ID 需要後續手動對結果進行排序。

解決方案

為了簡化此過程並維護MySQL 排序,存在另一種方法:

$ids = array(1,5,18,25);

// Construct a placeholder string containing ?,?,? etc.
$clause = implode(',', array_fill(0, count($ids), '?'));

$stmt = $mysqli->prepare('SELECT * FROM somewhere WHERE `id` IN (' . $clause . ') ORDER BY `name`;');

// Bind all IDs to the placeholder string using call_user_func_array
call_user_func_array(array($stmt, 'bind_param'), $ids);
$stmt->execute();

// Iterate over the results

此方法在一次呼叫中將所有ID 綁定到佔位符字串,從而使MySQL 能夠有效率地執行過濾和排序。

以上是如何在 MySQL 的 `WHERE ... IN()` 子句中有效地使用具有陣列過濾器的預先準備語句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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