例外-在NULL上调用成员函数get_record()

时间:2019-02-11 13:28:08

标签: php sql moodle moodle-api

我正在尝试使用moodle数据处理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);
?>

1 个答案:

答案 0 :(得分:0)

此功能需要解决一些问题:

  • 您需要添加全局$ DB;函数内部
  • 测验数据库表称为“测验”,而不是“ moodle.quiz”(Moodle配置处理连接到正确数据库的情况)
  • PHP使用'->'运算符访问对象属性,而不是'。'。 (用于连接),因此不是$ quiz-> id,而是$ quiz.id
  • 如果要返回所有测验,则应调用$ DB-> get_records(),而不是$ DB-> get_record()(如果发现多个记录,则仅返回1条记录并输出调试警告)。 / li>
  • 如果您要针对特定​​课程进行测验,则应匹配测验记录中的“课程”字段,而不是“ id”字段(这是测验的ID,而不是课程)。

所以函数可能看起来像这样:

document.body.addEventListener('click', (e) => {
    if (isInsideMySpecialWidget(e.target, "my-special-widget")) {
        console.log("user clicked INSIDE the widget");
    }
    console.log("user clicked OUTSIDE the widget");
});

function isInsideMySpecialWidget(elem, mySpecialWidgetId){
    while (elem.parentElement) {
        if (elem.id === mySpecialWidgetId) {
            return true;
        }
        elem = elem.parentElement;
    }
    return false;
}