【发布时间】:2021-12-04 05:38:12
【问题描述】:
下面的查询有一个 IN 条件,我想将部门代码的动态列表绑定到该条件,而不是像现在这样直接在查询中传递代码。我该怎么做?
<?php
$params = [
':academicYear' => $academicYear
];
$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 ('B16','B17','B18','B19','B20','B21')";
$connection->createCommand($sql)->bindValues($params)->queryScalar();
【问题讨论】:
-
创建一个数组,例如
$codes = array('B16','B17','B18','B19','B20','B21')并将其传递给IN ($codes)。 -
不幸的是,您必须分别绑定每个代码。当然你也可以使用
foreach和implode,让它与代码数量无关。 -
@MainulHasan 并面临 SQL 注入问题。相反,最好构建与数组中的项目数一样多的
?,然后使用一般准备好的语句。的绑定一些集合变量。 -
这能回答你的问题吗? Can I bind an array to an IN() condition?