首頁 >後端開發 >php教程 >如何正確地將字串陣列綁定到 MySQLi 準備好的語句?

如何正確地將字串陣列綁定到 MySQLi 準備好的語句?

Susan Sarandon
Susan Sarandon原創
2024-12-28 10:47:10975瀏覽

How to Correctly Bind an Array of Strings to a MySQLi Prepared Statement?

將字串陣列與mysqi 準備語句綁定

使用MySQL 時,通常需要將值陣列綁定到WHERE IN 子句使用準備好的語句。雖然此任務看似簡單,但存在一些可能導致錯誤的潛在陷阱。

在本文中,我們將探索使用 mysqli 準備好的語句綁定字串陣列的正確方法。我們還將提供所涉及步驟的詳細說明並討論潛在的解決方案。

出了什麼問題?

問題中提供的程式碼範例錯誤地嘗試使用bind_param 將城市陣列綁定到準備好的語句。然而,bind_param 期望標量值(例如,字串、整數等)作為其參數。嘗試直接綁定數組會導致錯誤。

正確的方法

要成功將字串陣列綁定到準備好的語句,我們可以使用以下程式碼步驟:

  1. 建立一個佔位符字串:首先,建立一個字串,其中包含適當數量的問號(?)來表示數組元素的佔位符。
  2. 將佔位符字串插入查詢中: 將 WHERE IN 子句替換為佔位符字串。
  3. 準備並綁定語句:準備修改後的查詢並使用正確的類型綁定陣列元素說明符(例如,'s' 表示字串)。
  4. 執行查詢:執行準備好的語句以取得結果。

範例程式碼

這是正確的範例code:

$mysqli = new mysqli("localhost", "root", "root", "db");
if(!$mysqli || $mysqli->connect_errno) { return; }

$cities = explode(",", $_GET['cities']);
$in = str_repeat('?,', count($cities) - 1) . '?';
$query_str = "SELECT name FROM table WHERE city IN ($in)";

$query_prepared = $mysqli->stmt_init();
if($query_prepared && $query_prepared->prepare($query_str)) {
    $types = str_repeat('s', count($cities));
    $query_prepared->bind_param($types, ...$cities);
    $query_prepared->execute();
}

在這個範例中,我們先使用str_repeat 建立一一串佔位符。然後,我們將此佔位符字串插入查詢中並準備語句。請注意我們如何使用 ...$cities 綁定城市數組的各個元素,並使用 str_repeat('s', count($cities)) 指定資料類型。

透過執行以下步驟,我們可以成功將字串陣列綁定到 mysqli 準備好的語句並按預期執行查詢。

以上是如何正確地將字串陣列綁定到 MySQLi 準備好的語句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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