Я столкнулся с проблемой. Я должен обновить поле в базе данных с помощью функции cron в Moodle. Я использую запрос на обновление в функции 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;
}
Пожалуйста, помогите разыскать его.
Посмотрите на документацию https://docs.moodle.org/dev/Data_manipulation_API#Updating_Records
$ DB-> update_record принимает 2 параметра: имя таблицы для обновления записи и объект, содержащий обновленные данные.
например
$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-> prefix} tablename и удаление ключевого слова ‘AS’, поскольку это не разрешено на всех механизмах БД.
Также обратите внимание, что если вы еще этого не сделали, включите отладку (http://docs.moodle.org/en/Debugging) даст вам гораздо больше полезных сообщений об ошибках.
Других решений пока нет …