考慮以下查詢,該查詢基於在特定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中文網其他相關文章!