我想在moodle中自定义一些字符串。因此,当我点击打开语言包进行编辑时,它将运行到69%并且出现错误“写入数据库时出错”
错误/的moodle / dmlwriteexception 这表示当Moodle尝试写入数据库时发生了一般错误。如果启用“调试”,您将获得有关问题的详细信息。
的MySQL 如果您正在为Moodle安装使用MySQL数据库,则可能是由于服务器的max_allowed_packet大小配置不正确而导致此错误。增加此值可能会解决此问题。
我曾尝试将max_allowed_packet 1M的值增加到100M,但仍会出现相同的错误。
请帮帮我
答案 0 :(得分:1)
尝试在config.php中添加以下设置:
@ini_set('display_errors', '1'); // NOT FOR PRODUCTION SERVERS!
$CFG->debug = 32767; // NOT FOR PRODUCTION SERVERS! // for Moodle 2.0 - 2.2, use: $CFG->debug = 38911;
$CFG->debugdisplay = true; // NOT FOR PRODUCTION SERVERS!
这应该告诉您有关导致错误的查询的更多信息,并帮助您解决问题。 当您完成调试后,请删除这些行,因为它们可能会带来安全风险。
答案 1 :(得分:0)
它可能是一个自定义插件,语言文件中的字符串ID不正确 - https://moodle.org/mod/forum/discuss.php?d=222815
尝试卸载任何自定义模块,然后使用语言自定义再次尝试,直到您可以确定导致问题的自定义插件。
答案 2 :(得分:0)
所以我不确定这是否相关,但由于我收到的消息完全相同,所以我假设是这样。
我是Moodle的新手,并尝试将其本地安装在我的计算机上。对此感到满意之后,便将其迁移到托管环境。我确定我在用户权限方面没有正确执行该过程,因为一旦我迁移实例,我就开始收到“写入数据库时出错”异常。
经过大量研究,并尝试了许多行不通的解决方案之后,我最终找到了行之有效的方法。在已写入记录的数据库上执行此操作很危险,但是解决方案是删除受影响表的“ id”列,然后在以下位置使用auto_increment再次添加它:
步骤1:在Moodle网站的“页面”设置中打开“调试”。这样,任何数据库插入都可能会返回这样的错误“
Debug info: Field 'id' doesn't have a default value
INSERT INTO mdl_course_sections (course,section,summary,summaryformat,sequence,name,visible,availability,timemodified) VALUES(?,?,?,?,?,?,?,?,?)
[array (
0 => '2',
1 => 10,
2 => '',
3 => '1',
4 => '',
5 => NULL,
6 => 1,
7 => NULL,
8 => 1548419949,
)]
Error code: dmlwriteexception
第2步:由于这为您提供了表名和受影响的字段,因此您可以执行以下SQL语句:
ALTER TABLE {table_name} DROP COLUMN {column_name};
ALTER TABLE {table_name} ADD COLUMN {column_name} INT AUTO_INCREMENT UNIQUE FIRST;
由于这里没有任何限制,因此删除一列主键(可能是其他表中的外键)的情况,除非重新安装,否则我不建议这样做。但这对我来说很好。