在 MySQL 准备语句中使用数组进行“WHERE ... IN(...)”查询
在数据库查询中,使用 IN语句可以通过减少对数据库的调用次数来优化性能。这在处理大型数据集时特别有用。想象一下这样的查询:
SELECT * FROM somewhere WHERE `id` IN(1,5,18,25) ORDER BY `name`;
如果您有要检索的 ID 数组,例如 $ids = array(1,5,18,25),您可能会考虑使用准备好的语句。准备好的语句可以防止 SQL 注入攻击并提高性能。下面是使用带有单个 id 的准备好的语句的示例:
$stmt = $mysqli->prepare('SELECT * FROM somewhere WHERE `id`=?;'); foreach ($ids as $id){ $stmt->bind_params('i', $id); $stmt->exec(); }
但是,这种方法需要对结果进行手动排序。相反,您可以使用更有效的替代方案,通过创建带有占位符 (?) 的字符串并使用 implode() 函数用逗号分隔它们。
$clause = implode(',', array_fill(0, count($ids), '?'));
然后,使用子句准备语句并绑定使用 call_user_func_array() 的 $ids 数组。
$stmt = $mysqli->prepare('SELECT * FROM somewhere WHERE `id` IN (' . $clause . ') ORDER BY `name`;'); call_user_func_array(array($stmt, 'bind_param'), $ids); $stmt->execute();
这种方法允许 MySQL 高效地处理排序,节省您的时间和努力。
以上是如何使用数组和准备语句优化 MySQL'WHERE ... IN(...)”查询?的详细内容。更多信息请关注PHP中文网其他相关文章!