Исключение - вызов функции-члена get_record () для NULL - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь использовать API манипулирования данными Moodle, чтобы анализировать оценки учащихся.Но когда я использую функцию get_record () внутри другой функции, которую я создал, я получаю сообщение об этом.Я не знаю, почему функция работает в основном и не работает внутри функции. Есть идеи?Я новичок в php и moodle, так что будьте спокойны.

<?php
function get_all_quiz ($courseid) {

    $quizesid = [];
    $quiz = $DB->get_record('moodle.quiz', array('id'=>$courseid));
    $quizesid = $quiz.id;

    return $quizesid;
}

global $DB;
define('CLI_SCRIPT', true);
require '../../var/www/moodle/config.php';

$coursetest = 3;
$studentgrades = [];

$quizes = get_all_quiz($coursetest);
?>

1 Ответ

0 голосов
/ 11 февраля 2019

Есть несколько вещей, которые необходимо исправить в этой функции:

  • Вам необходимо добавить глобальную $ DB;внутри функции
  • Таблица базы данных викторины называется «викторина», а не «moodle.quiz» (конфигурация Moodle обрабатывает подключение к правильной базе данных)
  • PHP использует оператор «->» для доступасвойства объекта, а не '.'(который используется для объединения), так что это не $ quiz-> id not, $ quiz.id
  • Если вы хотите вернуть все тесты, вам следует вызвать $ DB-> get_records (), а не $DB-> get_record () (который возвращает только 1 запись и выводит предупреждения об отладке, если найдено более одного).
  • Если вы хотите, чтобы тесты для определенного курса, то вы должны сопоставить поле «курс» взапись теста, а не поле 'id' (которое является идентификатором теста, а не курса).

Таким образом, функция должна выглядеть примерно так:

function get_all_quiz($courseid) {
    global $DB;
    return $DB->get_records('quiz', array('course' => $courseid));
}
...