【问题标题】:Exception - Call to a member function get_record( ) on NULL异常 - 在 NULL 上调用成员函数 get_record()
【发布时间】:2019-02-11 22:47:01
【问题描述】:

我正在尝试使用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);
?>

【问题讨论】:

    标签: php sql moodle moodle-api


    【解决方案1】:

    你需要在这个函数中修复一些事情:

    • 您需要添加全局$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));
    }
    

    【讨论】:

    • 非常感谢!我根据您的观察进行了一些更改,现在代码正在运行。我没有正确地解释我的自我,但我想返回具有该功能的课程的所有测验 id。如果我使用 get_records 我怎样才能得到测验的 id,比如使用 $quiz->id 和 get_record?
    • $quizzes = get_all_quiz($courseid); foreach ($quizzes as $quiz) { echo $quiz->id; } OR $quizids = $DB->get_fieldset_select('quiz', 'id', 'course = ?', [$courseid]); foreach ($quizids as $quizid) { echo $quizid; } 见docs.moodle.org/dev/Data_manipulation_API
    猜你喜欢
    • 2017-08-09
    • 1970-01-01
    • 2020-03-10
    • 2017-09-24
    • 2018-02-06
    • 2018-09-29
    • 2018-08-04
    • 2020-03-28
    • 2020-10-28
    相关资源
    最近更新 更多