我遇到了问题。我必须使用moodle中的cron函数更新数据库中的字段。我在cron函数中使用更新查询来更新值。但它不起作用。我正在使用此函数来更新值:
function activitysetmodule_cron ()
{
global $CFG, $DB;
$DB->update_record("activitysetmodule",)
$sql="update {$CFG->prefix}activitysetmodule as asm set status = 1 where exists (select 1 from {$CFG->prefix}course_modules as cm where (module=asm.activityset OR module=asm.activityset2 ) AND completion=1 AND asm.course =cm.course ");
return true;
}
请帮忙寻找它。
答案 0 :(得分:1)
查看文档https://docs.moodle.org/dev/Data_manipulation_API#Updating_Records
$ DB-> update_record需要2个参数,更新记录的表名和包含更新数据的对象。
e.g。
$obj = new stdClass();
$obj->id = $id_of_object_to_update;
$obj->status = 1;
$DB->update_record('tablename', $obj);
看起来您应该重构代码以获取要更新的记录列表,然后依次调用$ DB-> update_record(或$ DB-> set_field,如果只有一个字段要更新) 。或者,您可以使用$ DB-> execute($ sql)函数直接在服务器上运行某些SQL,例如。
$DB->execute("UPDATE {activitysetmodule} asm SET status = 1 WHERE EXISTS (SELECT 1 FROM {course_modules} cm WHERE (module=asm.activityset OR module=asm.activityset2 ) AND completion=1 AND asm.course = cm.course)");
请注意使用{tablename}而非{$ CFG->前缀} tablename以及删除' AS'关键字,因为所有数据库引擎都不允许这样做。
另请注意,如果您还没有这样做,打开调试(http://docs.moodle.org/en/Debugging)会为您提供更多有用的错误消息。