首页 >后端开发 >php教程 >如何在 MySQL 的 `WHERE ... IN()` 子句中有效地使用带有数组过滤器的预准备语句?

如何在 MySQL 的 `WHERE ... IN()` 子句中有效地使用带有数组过滤器的预准备语句?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-16 16:33:11762浏览

How Can I Efficiently Use Prepared Statements with Array Filters in MySQL's `WHERE ... IN()` Clause?

使用数组过滤器准备语句:'WHERE .. IN(..)'查询

问题

考虑以下查询,该查询基于在特定 ID 上:

SELECT * FROM somewhere WHERE `id` IN(1,5,18,25) ORDER BY `name`;

给定一个数组要获取的 ID ($ids),建议使用准备好的语句以提高效率。然而,使用循环迭代数组并分别绑定每个 ID 需要后续手动对结果进行排序。

解决方案

为了简化此过程并维护 MySQL 排序,存在另一种方法:

$ids = array(1,5,18,25);

// Construct a placeholder string containing ?,?,? etc.
$clause = implode(',', array_fill(0, count($ids), '?'));

$stmt = $mysqli->prepare('SELECT * FROM somewhere WHERE `id` IN (' . $clause . ') ORDER BY `name`;');

// Bind all IDs to the placeholder string using call_user_func_array
call_user_func_array(array($stmt, 'bind_param'), $ids);
$stmt->execute();

// Iterate over the results

该方法在一次调用中将所有 ID 绑定到占位符字符串,从而使 My​​SQL 能够高效地执行过滤和排序。

以上是如何在 MySQL 的 `WHERE ... IN()` 子句中有效地使用带有数组过滤器的预准备语句?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn