Moodle使用get_record_sql仅返回首条记录,如何获取全部查询数据?
Moodle数据库查询获取全部匹配记录的解决方法
问题原因
Moodle的数据库操作类中,get_record_sql() 方法的设计逻辑本身就是仅返回查询结果的第一条匹配记录,部分Moodle版本如果检测到匹配多条记录还会抛出警告,该方法仅适用于查询唯一结果的场景。
解决方法
直接将调用的方法替换为Moodle官方提供的 get_records_sql() 即可,该方法会返回所有符合查询条件的记录数组,数组默认以查询结果的第一个字段值为键,每个元素对应一行查询结果的字段对象。
修改后的代码示例
$sql = " SELECT bbb.name, ue.name AS UeName, bbb.timecreated, bbb.timemodified FROM mdl_bigbluebuttonbn AS bbb JOIN mdl_block_report_bbb_user_events AS ue ON ue.meeting_id = bbb.id "; // 替换get_record_sql为get_records_sql获取全量匹配数据 $result = $DB->get_records_sql($sql); var_dump($result);die();
补充注意事项
- 如果查询结果量极大,建议使用
get_recordset_sql()方法迭代处理结果,避免一次性加载全量数据导致内存溢出 - 后续如果需要增加查询条件,务必遵循Moodle规范使用参数绑定,不要直接把变量拼接进SQL语句,避免SQL注入风险
内容的提问来源于stack exchange,提问作者Marco Medic
相关产品推荐
相关产品推荐

