首页 >后端开发 >php教程 >如何有效地将字符串数组绑定到 MySQLi 准备语句的 IN 子句?

如何有效地将字符串数组绑定到 MySQLi 准备语句的 IN 子句?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-24 15:50:11529浏览

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