使用 IN 运算符的 MySQLi 准备语句
准备语句允许您单独指定参数值,从而比传统查询提供增强的安全性和性能声明本身。但是,当涉及到将准备好的语句与 IN 运算符一起使用时,如果您的方法不正确,则可能会遇到问题。
问题
如最初所述查询时,使用 bind_param('s', $in_statement) 将逗号分隔的值字符串绑定到准备好的语句将不会产生结果,即使数据存在于
解决方案
解决方案在于单独处理每个参数值:
示例代码
<?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中文网其他相关文章!