在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:
範例:
$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中文網其他相關文章!