Laravel原生查询中如何正确将数组传入WHERE IN子句?
在Laravel原生查询中正确传入数组到IN子句的方法
你当前的写法存在问题:直接用单个?绑定数组时,Laravel会将数组转换为字符串(比如Array),导致IN子句实际只匹配一个无效值,所以得不到预期结果。以下是两种正确的处理方式:
方法一:原生查询中生成对应数量的占位符
通过生成与数组元素数量一致的?占位符,再将数组作为参数传入,让Laravel自动逐个绑定值:
$groupOfTopics = [46, 51, 167, 176, 177, 181, 185, 270, 323, 328, 350]; // 生成和数组长度匹配的占位符字符串,格式为"?, ?, ?, ..." $placeholders = implode(',', array_fill(0, count($groupOfTopics), '?')); $Data = DB::connection('DB')->select( "SELECT ... WHERE code IN ($placeholders)", $groupOfTopics );
这种方式完全遵循参数绑定的安全规范,不会存在SQL注入风险。
方法二:使用Laravel查询构建器(更简洁)
如果不需要完全手写原生SQL,推荐用查询构建器的whereIn方法,Laravel会自动处理IN子句的占位符和值绑定:
$groupOfTopics = [46, 51, 167, 176, 177, 181, 185, 270, 323, 328, 350]; $Data = DB::connection('DB') ->table('your_table_name') // 替换为实际表名 ->select('column1', 'column2') // 替换为需要查询的字段 ->whereIn('code', $groupOfTopics) ->get();
这种写法更简洁,也更符合Laravel的开发习惯,同时避免了手动处理占位符的繁琐。
内容的提问来源于stack exchange,提问作者yellow_melro
相关产品推荐
相关产品推荐

