Php SQL查询出错

Php SQL查询出错,php,mysql,sql,moodle,Php,Mysql,Sql,Moodle,我正在将Moodle 1.0模块移植到2.0版。在检查几个PHP文件中的错误时,我遇到了一条查询错误消息,但没有显示错误是什么。以下是查询: global $DB; //required global variable $vms = $DB->get_records_sql('SELECT DISTINCT vm.*, uva.assignment_id, gm.groupid, CASE WHEN gm.group

我正在将Moodle 1.0模块移植到2.0版。在检查几个PHP文件中的错误时,我遇到了一条查询错误消息,但没有显示错误是什么。以下是查询:

global $DB; //required global variable

$vms = $DB->get_records_sql('SELECT DISTINCT vm.*, uva.assignment_id, gm.groupid,
                                    CASE WHEN gm.groupid IS NULL THEN uva.user_id ELSE NULL END user_id
                                    FROM {mdl_vMoodle_Virtual_Machine} vm 
                                    INNER JOIN {mdl_vMoodle_UVA} uva ON vm.id = uva.vm_id 
                                    LEFT JOIN {mdl_groups_members} gm ON gm.userid = uva.user_id
                                    WHERE uva.assignment_id = :assignmentid', array('assignmentid'=>$assignment_id));
有人能告诉我这个函数调用有什么不正确吗


更新:删除DISTINCT使错误消失。Moodle 2.0几乎没有文档,所以我不确定它是否只是不接受distinct关键字。

SQL语法正常,所以这不是问题所在。您需要检查$assignment_id的值,变量可能未设置,或者设置的值类型不正确,这就是导致错误的原因

我建议你补充:

var_dump($assignment_id);

就在这个查询之前,看看你得到了什么。如果收到“undefined”(未定义)消息,请检查软件的逻辑,看看是什么导致了这种情况。

SQL语法正常,因此这不是问题所在。您需要检查$assignment_id的值,变量可能未设置,或者设置的值类型不正确,这就是导致错误的原因

我建议你补充:

var_dump($assignment_id);

就在这个查询之前,看看你得到了什么。如果收到“undefined”(未定义)消息,请检查软件的逻辑,以查看可能的原因。

不要添加表名前缀“mdl_”,因为使用{}会自动添加它。

不要添加表名前缀“mdl_”,因为使用{}会自动添加它。

没有看到此查询有任何语法问题。我不熟悉Moodle如何绑定PDO参数,但通常PDO参数数组会在其键中包含
,就像
数组(':assignmentid'=>$assignment\u id)
(虽然我认为这是可选的)“我遇到了一条查询错误消息”所以告诉我们错误消息是怎么说的。准确粘贴,而不是解释。错误(其他)-第327行-这是准确的错误。它没有说明任何其他内容。没有发现此查询有任何语法问题。我不熟悉Moodle如何绑定PDO参数,但通常PDO参数数组会在其键中包含
,就像
数组(':assignmentid'=>$assignment\u id)
(虽然我认为这是可选的)“我遇到了一条查询错误消息”所以告诉我们错误消息是怎么说的。准确粘贴,而不是解释。错误(其他)-第327行-这是准确的错误。它没有说其他任何东西。好吧,这是在实际运行脚本之前,所以它必须是一个语法错误。也许是Moodle特有的东西?嗯……你确定这就是全部代码吗?从粘贴的结构来看,似乎您正在使用PDO或其他库将变量传递给查询。请编辑您的帖子,并在这段代码之前添加正确的内容。如果没有其他东西,那么您就遗漏了一些东西,因为您的代码看起来像是函数调用的参数。嗯,这是在实际运行脚本之前,所以它必须是语法错误。也许是Moodle特有的东西?嗯……你确定这就是全部代码吗?从粘贴的结构来看,似乎您正在使用PDO或其他库将变量传递给查询。请编辑您的帖子,并在这段代码之前添加正确的内容。如果没有其他东西,那么您就遗漏了一些东西,因为您的代码看起来像是函数调用的参数;在本例中,mdl实际上是我在数据库中命名表的方式;这不是一件无聊的事。