2010-12-20 211 views
0

我的SQL腳本沒有返回值'sid',當我使用它與PHP,但是當我運行它對實際數據庫它會返回值。我無法弄清楚我的錯誤在哪裏。我的表如下所示:SQL查詢不返回值

Song 
aid (1) 
sid (999) 
title (Moonlight Sonata) 
surl 

Album 
aid (1) 
artist (Beethoven) 
genre (Classic) 
album 

這裏是我的代碼:

$sql="SELECT S.title, S.surl, S.sid, A.aid, A.album, A.artist FROM challenge C, 
    song S, album A WHERE C.fid = '$uid' AND uid = '$user' AND date = '$date' 
    AND C.sid = S.sid AND S.aid = A.aid"; 

$result=mysql_query($sql); 

if (mysql_num_rows($result) != 0){ 
    while($row=mysql_fetch_array($result)){ 
    $title = $row[title]; 
    $album = $row[album]; 
    $surl = $row[surl]; 
    $artist = $row[artist]; 
    $aid = $row[aid]; 
    $sid = $row[sid]; 

echo "Album: $album Artist: $artist Title: $title Song: $surl SongID: $sid"; 
    } 
} 

一切都只是價值「SID」打印 - 這應該打印999任何幫助將不勝感激!

回答

3

$row[title]不是您要查找的語法。如果你想enable error reporting,你會看到關於未定義常量的警告。只要編寫title就會使PHP尋找名爲「title」的constant,該標題不存在。只有這樣,它纔會回落到字符串中,並嘗試如果你的意思是字符串'title'SID碰巧是一個預定義的常量,所以這是它使用常量值的唯一時間,並且數組中沒有該常量值的索引。

引用你的字符串!寫$row['title']$row['sid']

請閱讀"Why is $foo[bar] wrong?"
此外請閱讀關於SQL injection的文章並逃避您的輸入!

+0

非常感謝!我會閱讀這些文章 - 我對PHP仍然很陌生,所以我仍然在學習。我感謝您的幫助! – user457666 2010-12-20 02:38:27

+0

@用戶不客氣。爲了自己的未來:啓用錯誤報告!將其設置爲'error_reporting(-1)'以查看* all *錯誤。在[手冊](http://www.php.net/manual/en/)中查找出現的任何錯誤。它會幫助你很多! – deceze 2010-12-20 02:40:33

0

您不是在查詢($ uid,$ user,$ date)中轉義您的值,並且其中一個或多個包含SQL元字符(可能是報價'),這會破壞查詢的語法。

您還沒有檢查mysql_query()調用的返回值並假定它成功。在最低限度,你應該有

$result = mysql_query($sql) or die(mysql_error()); 

$result = mysql_query($sql); 
if ($result === FALSE) { 
    die(mysql_error()); 
} 

而且你也有一種無形的語法錯誤,你fetch_row循環:

$title = $row[title]; 

你需要的是

$title = $row['title'] 

您正在嘗試fetc h使用不存在的常量「標題」的數組索引。這也適用於您試圖從$row中檢索的所有其他值。