2013-08-22 24 views
1
SELECT Batch.NumStud 
FROM Batch 
WHERE CourseID='$courseid' 
INNER JOIN Course 
ON Batch.CourseID=Course.CourseID" 

,說mysql_fetch_array(): supplied argument is not a valid MySQL result resource in <b>F:\AppServ\www\anNoECourse.php這行SQL有什麼問題?

的誤差shown.This代碼被寫在數據饋送到一個谷歌圖表。

+1

Mr.Watson說:where和join的順序是錯誤的...(並認真對待Andy Lester留下的註釋,SQL注入是有害的) – ppeterka

+10

**您已經開始對SQL注入攻擊敞開大門。請了解使用參數化查詢(最好是使用PDO模塊)來保護您的Web應用程序。 http://bobby-tables.com/php有例子讓你開始。 –

+2

PHP錯誤表示問題不在SQL中,而是在PHP代碼中。 –

回答

7

你把SQL中錯誤的順序(JOIN和WHERE切換):

SELECT Batch.NumStud 
    FROM Batch INNER JOIN Course 
      ON Batch.CourseID = Course.CourseID 
    WHERE Course.CourseID = '$courseid' 

看來,你的查詢可以簡化(檢查數據):

select Batch.NumStud 
    from Batch 
    where Batch.CourseID = '$courseid' 
+0

雖然這可以確保他大部分時間都能獲取數據,但是如果數據庫無法訪問,他的代碼仍然會失敗,因爲他沒有正確處理mysql_query的結果(請參閱我的回覆)。這也應該注意到! –

0

我認爲這個錯誤有點複雜。由於你的SQL無效,你沒有得到結果集。您的PHP代碼無法正確處理這種情況!

因此,除了像其他人所建議的那樣更正您的SQL之外,請確保處理在您的PHP代碼中沒有得到任何結果或您的查詢結果錯誤正確的情況!

第二部分到您的解決方案如下:

$result = mysql_query(...); 
if ($result) 
{ 
    while (...) 
     ... 
} 

這可以確保mysql_query實際返回的結果集,而不是false,其中它在錯誤的情況下(由於您的無效的SQL代碼,而且在其他情況下)。所以只修復你的SQL是不夠的,使你的腳本錯誤證明。

但是,不要再使用mysql_....功能!他們已被棄用。