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

Laravel中使用whereRaw结合IN子句查询报错求助

Laravel 查询参数绑定错误解决方案

错误原因

你遇到的HY093错误,核心原因是PDO不支持将数组直接绑定到单个命名参数。在whereRaw中写CATEGORIA IN (:Par2)时,:Par2被识别为单个参数,但你传入的是数组['x1','x2'],PDO无法解析这种绑定逻辑,导致参数数量不匹配。

解决方案

方案一:使用Laravel原生查询构建器(推荐)

直接拆分条件为where和whereIn,Laravel会自动处理参数绑定,避免手动拼接的风险:

$cats = ['x1', 'x2'];
$result = Projecto::where('ESTADO', 'd1')
    ->whereIn('CATEGORIA', $cats)
    ->get();

方案二:手动处理whereRaw的数组绑定(仅当必须用whereRaw时)

需要为数组中的每个元素生成独立占位符,再绑定对应参数:

$cats = ['x1', 'x2'];
// 生成与数组长度匹配的命名占位符
$placeholders = collect($cats)->map(fn($_, $index) => ":cat{$index}")->implode(', ');
// 合并基础参数和数组参数
$params = array_merge(
    ['Par1' => 'd1'],
    collect($cats)->mapWithKeys(fn($value, $index) => ["cat{$index}" => $value])->toArray()
);
// 执行查询
$result = Projecto::whereRaw("(ESTADO = :Par1 AND CATEGORIA IN ({$placeholders}))", $params)->get();

关于移除Par2仍报错的问题

如果移除Par2和第二个条件后错误依旧,建议:

  • 确认代码已保存并重新运行,无旧代码残留
  • 清除Laravel缓存:执行php artisan cache:clear和php artisan config:clear命令
  • 检查是否有其他复用相同查询逻辑的代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:42:07