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

如何有效地將字串陣列綁定到 MySQLi 準備語句的 IN 子句?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-24 15:50:11536瀏覽

How to Efficiently Bind an Array of Strings to a MySQLi Prepared Statement's IN Clause?

在MySQLi 準備語句中為IN 子句綁定字串陣列

在資料庫互動領域,可能會出現以下情況:需要將字串值陣列綁定到MySQLi 預先準備語句中的WHERE IN (?) 子句。本文深入探討了基本原理並提供了優雅的解決方案,特別關注 PHP 8.2、8.1 和更早版本。

PHP 8.2:簡化方法

The PHP 8.2 中引入的execute_query() 函數簡化了使用資料填充數組執行準備好的語句的過程。例如:

$sql = "SELECT name FROM table WHERE city IN (?,?)";
$array = ["Nashville", "Knoxville"];
$result = $mysqli->execute_query($sql, $array);

對於涉及動態佔位符計數的情況,您可以使用str_repeat() 動態構造佔位符:

$array = ["Nashville", "Knoxville"];
$parameters = str_repeat("?,", count($array) - 1) . "?";
$sql = "SELECT name FROM table WHERE city IN ($parameters)";
$result = $mysqli->execute_query($sql, $array);

PHP 8.1:直接數組執行

在PHP 8.1及更高版本中,您可以使用以下指令執行準備好的語句直接數組,而無需明確綁定:

$sql = "SELECT name FROM table WHERE city IN (?,?)";
$stmt = $mysqli->prepare($sql);
$stmt->execute(["Nashville", "Knoxville"]);
$result = $stmt->get_result();

早期版本:擁抱複雜性

對於PHP 8.1之前的版本,流程稍微複雜一些intricate:

  • 建立一個佔位符字串,其問號數量與元素相同使用 str_repeat() 在陣列中。
  • 將此佔位符字串加入查詢。
  • 以傳統方式準備查詢。
  • 使用 str_repeat() 為 bind_param() 建構型別字串),通常使用「s」表示字串。
  • 使用參數解包運算子 (...) 來批次綁定陣列值。
  • 執行查詢並檢索結果。

範例:

$array = ["Nashville", "Knoxville"];
$in = str_repeat("?,", count($array) - 1) . "?";
$sql = "SELECT name FROM table WHERE city IN ($in)";
$stmt = $mysqli->prepare($sql);
$types = str_repeat("s", count($array));
$stmt->bind_param($types, ...$array);
$stmt->execute();
$result = $stmt->get_result();

雖然稍微多一點冗長,與其他方法相比,此程式碼提供了一個簡潔的解決方案。

總之,綁定一個數組MySQLi 準備好的語句中 IN 子句的字串涉及多種針對不同 PHP 版本定制的方法。透過利用本文中描述的技術,您可以在資料庫互動中有效地執行這些查詢。

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

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