首页 > 解决方案 > 异常 - 在 NULL 上调用成员函数 get_record()

问题描述

我正在尝试使用moodle Data Manipulation API 来获取学生的成绩以进行分析。但是当我在我创建的另一个函数中使用函数 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);
?>

标签: phpsqlmoodlemoodle-api

解决方案


您需要在此函数中修复一些问题:

  • 您需要添加全局 $DB; 函数内部
  • 测验数据库表称为“测验”,而不是“moodle.quiz”(Moodle 配置处理连接到正确的数据库)
  • PHP 使用 '->' 操作符来访问对象属性,而不是 '.' (用于连接),所以是 $quiz->id 不是,$quiz.id
  • 如果您想返回所有测验,您应该调用 $DB->get_records(),而不是 $DB->get_record()(它只返回 1 条记录,如果找到多条记录,则输出调试警告)。
  • 如果您想要特定课程的测验,那么您应该匹配测验记录中的“课程”字段,而不是“id”字段(这是测验的 ID,而不是课程)。

所以函数应该看起来像这样:

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

推荐阅读