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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:15:34