如何使用cron更新moodle中的数据库

时间:2014-09-30 08:07:37

标签: php cron moodle

我遇到了问题。我必须使用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;
}

请帮忙寻找它。

1 个答案:

答案 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)会为您提供更多有用的错误消息。