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

Moodle 4.3自定义Mod插件预览生成测验时数据库查询错误

Moodle 4.3 Mod插件预览测验时数据库记录找不到错误

问题描述

我正在开发Moodle 4.3的Mod插件,流程为:接收PDF文件输入→解析内容→调用GPT-4 API生成10道基于PDF内容的选择题。目前mdl_question表及分类、题库相关表均已正常填充数据,但预览测验时触发以下错误:

Can't find data record in database

Debug info: SELECT quid, qc.id as category, q.parent, q.name, q.questiontext, q.questiontextformat, q.generalfeedback, q.generalfeedbackformat, q.defaultmark, q.penalty, q.qtype,
q.length, q.stamp, q.timecreated, q.timemodified,
q.createdby, q.modifiedby, qbe.idnumber,
qc.contextid,
qv.status,
qv.id as versionid,
qv.version,
qv.questionbankentryid
FROM (question) q
JOIN {question_versions) qv ON qv.questionid = q.id
JOIN (question_bank_entries) qbe ON qbe.id = qv.questionbankentryid
JOIN (question_categories) qc ON qc.id = qbe.questioncategoryid
WHERE q.id = id
[array (
'id' => 's61',
Error code: invalidrecordunknown

Stack trace:
• line 1686 of \lib\dmi\moodle_database.php: dml_missing_record_exception thrown
line 694 of \question\engine\bank.php: call to moodle_database->get_record_sql()
line 600 of \cache\classes\loaders.php: call to question_finder->load_for_cache()
• line 418 of \cache\classes\loaders.php: call to cache->get_implementation()
line 530 of \question\engine\bank.php: call to cache->get()
line 257 of \question\engine\bank.php: call to question_finder->load_question_data()
line 275 of \question\engine\bank.php: call to question_bank::load_question_data()
• line 190 of \mod\quiz\locallib.php: call to question_bank::load_question()
line 2056 of \mod\quiz\locallib.php: call to quiz_start_new_attempt()
line 110 of \mod\quiz\startattempt.php: call to quiz_prepare_and_start_new_attempt()

核心疑问:系统为何会搜索以s开头的ID(如s61),而mdl_question的ID应为纯数字自增字段;已对比手动生成测验与插件生成测验的数据库表数据,未发现明显差异。可提供插件的lib.php和view.php文件,寻求技术帮助。

排查方向

  • 检查测验-题目关联逻辑:确认插件调用quiz_add_quiz_question()等核心函数时,传入的questionid是否为mdl_question表的纯数字主键,而非带s前缀的字符串。
  • 校验题目关联表数据:核对mdl_question_versions、mdl_question_bank_entries表中的关联ID是否为有效纯数字,且与对应表的主键匹配。
  • 清除Moodle缓存:错误涉及缓存加载,执行后台「站点管理→开发→清除缓存」操作,排除旧缓存数据干扰。
  • 检查题目ID生成逻辑:确认插入mdl_question时,是否通过Moodle原生insert_record()函数获取自动生成的ID,而非手动拼接带前缀的ID。

内容的提问来源于stack exchange,提问作者Laurențiu-Flavius Istrate

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 00:22:30