You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在原生SQL查询的IN/NOT IN中正确绑定数组参数?

在原生SQL的IN/NOT IN语句中正确绑定数组参数的方法

你遇到的问题是因为PDO参数绑定不支持直接把数组作为单个参数传入,每个占位符只能对应一个标量值,所以直接绑定数组会触发数组转字符串错误。下面给你两种可行的解决方式:

方法一:使用Laravel查询构建器(推荐)

Laravel的查询构建器会自动处理数组参数的绑定,既安全又简洁,完全不需要手动拼接SQL:

$user_list_to_exclude = [1, 2, 3];

$data = DB::table('users')
          ->whereNotIn('user_id', $user_list_to_exclude)
          ->get();

方法二:手动生成占位符(原生SQL场景)

如果必须用原生SQL语句,需要根据数组长度生成对应数量的占位符,再把数组元素逐个绑定:

匿名占位符版本

$user_list_to_exclude = [1, 2, 3];
// 生成对应数量的?占位符
$placeholders = implode(', ', array_fill(0, count($user_list_to_exclude), '?'));

$data = DB::select("SELECT * FROM users WHERE user_id NOT IN ($placeholders)", $user_list_to_exclude);

命名占位符版本

如果习惯用命名参数,可以循环生成带索引的命名占位符:

$user_list_to_exclude = [1, 2, 3];
$bindings = [];
$placeholders = [];

foreach ($user_list_to_exclude as $index => $id) {
    $key = ":user_id_{$index}";
    $placeholders[] = $key;
    $bindings[$key] = $id;
}

$placeholder_str = implode(', ', $placeholders);
$data = DB::select("SELECT * FROM users WHERE user_id NOT IN ($placeholder_str)", $bindings);

内容的提问来源于stack exchange,提问作者pileup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 13:05:01