在MySQL 準備語句中使用陣列進行「WHERE ... IN(...)」查詢
在資料庫查詢中,使用IN語句可以透過減少對資料庫的呼叫次數來優化效能。這在處理大型資料集時特別有用。想像這樣的查詢:
SELECT * FROM somewhere WHERE `id` IN(1,5,18,25) ORDER BY `name`;
如果您有要檢索的 ID 數組,例如 $ids = array(1,5,18,25),您可能會考慮使用準備好的語句。準備好的語句可以防止 SQL 注入攻擊並提高效能。以下是使用單一 id 的準備好的語句的範例:
$stmt = $mysqli->prepare('SELECT * FROM somewhere WHERE `id`=?;'); foreach ($ids as $id){ $stmt->bind_params('i', $id); $stmt->exec(); }
但是,這種方法需要手動排序結果。相反,您可以使用更有效的替代方案,透過建立帶有佔位符 (?) 的字串並使用 implode() 函數用逗號分隔它們。
$clause = implode(',', array_fill(0, count($ids), '?'));
然後,使用子句準備語句並綁定使用 call_user_func_array() 的 $ids 陣列。
$stmt = $mysqli->prepare('SELECT * FROM somewhere WHERE `id` IN (' . $clause . ') ORDER BY `name`;'); call_user_func_array(array($stmt, 'bind_param'), $ids); $stmt->execute();
這種方法允許 MySQL 有效率地處理排序,節省您的時間和努力。
以上是如何使用陣列和準備語句來最佳化 MySQL'WHERE ... IN(...)”查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!