在 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中文网其他相关文章!