首頁 > 後端開發 > php教程 > 如何使用 PHP 的 mysqli 準備語句有效率地將字串陣列綁定到 MySQL WHERE IN(?) 子句?

如何使用 PHP 的 mysqli 準備語句有效率地將字串陣列綁定到 MySQL WHERE IN(?) 子句?

Linda Hamilton
發布: 2024-12-24 01:57:13
原創
988 人瀏覽過

How to Efficiently Bind an Array of Strings to a MySQL WHERE IN(?) Clause Using PHP's mysqli Prepared Statements?

將字串陣列綁定到WHERE IN(?) 子句

將值數組綁定到WHERE IN(?) 子句是一個常見的MySQL 任務。當使用 PHP 的 mysqli 準備好的語句時,如果您不熟悉 bind_param() 函數的限制和細微差別,那麼實作起來可能會很困難。

問題

嘗試使用bind_param()將值數組綁定到IN(?)子句時可能會遇到問題,導致失敗

解決方案

完成此任務有不同的方法,取決於您使用的PHP 版本:

PHP 8.2 和上面

  • execute_query() 函數: 此函數允許您直接將值數組(?)。它用一行程式碼簡化了流程。

PHP 8.1

  • 傳遞一個陣列到execute(): 在 PHP 8.1中,對於準備好的語句,您可以直接將陣列傳遞給execute(),從而更簡單地綁定多個

早期PHP 版本

對於舊版本,需要更複雜的方法:

  1. 建立一個字串與陣列中元素的數量一樣多的問號(?)。
  2. 將帶有佔位符的字串加入查詢字串。
  3. 使用 str_repeat() 建立一個類型字串,以將資料綁定到正確的類型(例如,字串的 's')。
  4. 使用下列方法將陣列元素綁定到語句bind_param() 中的參數解包運算子 (...)。
  5. 執行語句並擷取結果

範例程式碼

這是使用早期PHP 版本方法的範例:

$array = ['Nashville', 'Knoxville'];
$in = str_repeat('?,', count($array) - 1) . '?';
$sql = "SELECT name FROM table WHERE city IN ($in)";
$stmt = $mysqli->prepare($sql); // prepare
$types = str_repeat('s', count($array)); // types
$stmt->bind_param($types, ...$array); // bind array at once
$stmt->execute();
$result = $stmt->get_result();
$data = $result->fetch_all(MYSQLI_ASSOC);
登入後複製

透過了解這些方法,您可以使用mysqli 準備好的語句有效地將字串陣列綁定到WHERE IN(?) 子句,從而確保成功執行您的查詢。

以上是如何使用 PHP 的 mysqli 準備語句有效率地將字串陣列綁定到 MySQL WHERE IN(?) 子句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板