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

如何正确地将字符串数组绑定到 MySQLi 准备好的语句?

Susan Sarandon
Susan Sarandon原创
2024-12-28 10:47:10969浏览

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