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

如何将动态列表绑定到SQL语句的WHERE IN查询条件中

动态绑定IN条件参数实现方案

由于数据库预处理机制不支持直接将数组作为单个参数绑定到IN条件,需要为IN列表的每个元素生成独立的唯一占位符,再逐个绑定对应参数即可,完全保留参数绑定防SQL注入的特性。

完整修改后代码

<?php
// 动态部门编码列表,可根据业务场景动态赋值,无需硬编码到SQL中
$deptCodes = ['B16','B17','B18','B19','B20','B21'];
$params = [
    ':academicYear' => $academicYear
];

// 生成IN条件的占位符集合
$deptPlaceholders = [];
foreach ($deptCodes as $index => $code) {
    $placeholder = ":dept_{$index}";
    $deptPlaceholders[] = $placeholder;
    $params[$placeholder] = $code;
}
$deptPlaceholderStr = implode(',', $deptPlaceholders);

$sql = "SELECT 
        MUTHONI.COURSES.COURSE_CODE, MUTHONI.COURSES.COURSE_CODE
        FROM MUTHONI.MARKSHEET_DEF 
        INNER JOIN MUTHONI.COURSES ON MUTHONI.MARKSHEET_DEF.COURSE_ID = 
        MUTHONI.COURSES.COURSE_ID
        WHERE MUTHONI.MARKSHEET_DEF.MRKSHEET_ID LIKE CONCAT(:academicYear, '%')
        AND MUTHONI.COURSES.DEPT_CODE IN ({$deptPlaceholderStr})";

$connection->createCommand($sql)->bindValues($params)->queryScalar();

注意事项

  • 提前判断部门编码数组是否为空,若为空建议直接跳过IN条件拼接,或抛出业务异常,避免生成IN ()的非法SQL语法
  • 生成的占位符命名要保证唯一,不要和SQL中其他已使用的参数名冲突
  • 若使用框架自带的查询构造器,可直接调用构造器提供的IN条件方法,底层会自动完成占位符生成和参数绑定逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:15:03