Moodle中如何结合get_in_or_equal查询与多参数构建SQL语句?
在Moodle中同时使用WHERE IN和其他命名参数构建SQL查询
解决这个问题的核心是把额外的命名参数合并到$DB->get_in_or_equal返回的参数数组中,因为$DB->get_records_sql的第二个参数需要包含SQL语句里所有用到的命名参数。
完整实现代码
// 假设$some_ids是目标ID列表,$userid是要传入的用户ID list($insql, $inparams) = $DB->get_in_or_equal($some_ids); // 将userid参数追加到参数数组(键名与SQL中的命名参数去掉冒号一致) $inparams['userid'] = $userid; $sql = "SELECT ... FROM a LEFT OUTER JOIN b ON a.id = b.aid AND b.userid = :userid WHERE a.id $insql"; $rows = $DB->get_records_sql($sql, $inparams);
关键说明
$DB->get_in_or_equal返回的$inparams是一个关联数组,已经包含了IN子句对应的参数占位符和值,直接往里面新增键值对即可。- SQL中的命名参数(如
:userid)在参数数组中对应的键名不需要带冒号,直接写userid,Moodle数据库API会自动完成匹配。 - 这种方式既安全处理了IN子句,又正确绑定了其他命名参数,完全符合Moodle的数据库操作规范,能有效避免SQL注入风险。
内容的提问来源于stack exchange,提问作者natral
相关产品推荐
相关产品推荐

