首页 > 数据库 > mysql教程 > 如何有效地使用 MySQLi 预准备语句和 IN 运算符?

如何有效地使用 MySQLi 预准备语句和 IN 运算符?

Mary-Kate Olsen
发布: 2024-12-27 00:12:10
原创
381 人浏览过

How to Use MySQLi Prepared Statements with the IN Operator Effectively?

使用 IN 运算符的 MySQLi 准备语句

准备语句允许您单独指定参数值,从而比传统查询提供增强的安全性和性能声明本身。但是,当涉及到将准备好的语句与 IN 运算符一起使用时,如果您的方法不正确,则可能会遇到问题。

问题

如最初所述查询时,使用 bind_param('s', $in_statement) 将逗号分隔的值字符串绑定到准备好的语句将不会产生结果,即使数据存在于

解决方案

解决方案在于单独处理每个参数值:

  1. 创建一个包含编号键和传递值的数组通过引用明确地指向它。
  2. 计算参数的数量并创建一个具有适当数量的 i 字符的字符串,表示它们的数据类型。
  3. 将数据类型字符串与问号数组组合起来,形成准备好的语句的参数字符串。
  4. 将数据类型字符串取消移动到参数值数组中。
  5. 使用call_user_func_array将参数值数组绑定到准备好的

示例代码

<?php
$lastnames = ['braun', 'piorkowski', 'mason', 'nash'];
$arParams = [];

foreach ($lastnames as $key => $value) {
    $arParams[] = &$lastnames[$key];
}

$count_params = count($arParams);
$int = str_repeat('i', $count_params);
array_unshift($arParams, $int);

$q = array_fill(0, $count_params, '?');
$params = implode(',', $q);

$data_res = $mysqli->prepare("SELECT `id`, `name`, `age` FROM `users` WHERE `lastname` IN ({$params})");
call_user_func_array([$data_res, 'bind_param'], $arParams);
$data_res->execute();
$result = $data_res->get_result();

while ($data = $result->fetch_array(MYSQLI_ASSOC)) {
    // Your code here...
}

$result->free();
$data_res->close();
登录后复制

此方法允许您使用 IN 运算符将多个值正确绑定到准备好的语句。

以上是如何有效地使用 MySQLi 预准备语句和 IN 运算符?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板