SQL查询不返回值

问题描述:

我的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任何帮助将不胜感激!

$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

您不是在查询($ 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中检索的所有其他值。