2012-12-16 164 views
1

我將Moodle 1.0模塊移植到版本2.0。在檢查幾個PHP文件中的錯誤時,我遇到了查詢的錯誤消息,但沒有指出錯誤是什麼。這裏是查詢:SQL查詢出錯

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關鍵字。

+0

看不到此查詢的任何語法問題。我不熟悉Moodle如何綁定PDO參數,但通常PDO參數數組在其關鍵字中包含':',如'array(':assignmentid'=> $ assignment_id)'(儘管我認爲它是可選的) –

+0

「我遇到了查詢的錯誤消息」所以告訴我們錯誤消息說的是什麼。粘貼它,而不是一個釋義。 –

+0

錯誤(其他) - 第327行 - 這是確切的錯誤。它沒有說別的。 –

回答

0

SQL語法正常,所以這不是問題。您需要檢查$ assignment_id的值,該變量可能未設置,或者使用不正確的值類型進行設置,這就是導致錯誤的原因。

我建議你補充:

var_dump($assignment_id); 

右此查詢之前,看看你會得到什麼。如果您收到「未定義」消息,請檢查軟件的邏輯以查看可能導致此問題的原因。

+0

那麼,這是實際運行腳本之前,所以它必須是一個語法錯誤。也許是特定於Moodle的東西? –

+0

嗯.....你確定這是整個代碼?從您正在粘貼的結構看來,您似乎正在使用PDO或其他庫將變量傳遞給查詢。請編輯您的文章並在此代碼之前添加正確的內容。如果沒有別的東西,那麼你錯過了一些東西,因爲你的代碼看起來像函數調用的參數。 –

+0

我更新了問題 –

1

請勿添加表名稱前綴「mdl_」,因爲通過使用{}它會自動添加。

+0

在這種情況下,mdl_實際上是我在數據庫中命名錶的方式;它不是Moodle的東西。 –