考虑以下查询,该查询基于在特定 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 绑定到占位符字符串,从而使 MySQL 能够高效地执行过滤和排序。
以上是如何在 MySQL 的 `WHERE ... IN()` 子句中有效地使用带有数组过滤器的预准备语句?的详细内容。更多信息请关注PHP中文网其他相关文章!