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的文章并逃避您的输入!
答
您不是在查询($ 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
中检索的所有其他值。
非常感谢!我会阅读这些文章 - 我对PHP仍然很陌生,所以我仍然在学习。我感谢您的帮助! – user457666 2010-12-20 02:38:27
@用户不客气。为了自己的未来:启用错误报告!将其设置为'error_reporting(-1)'以查看* all *错误。在[手册](http://www.php.net/manual/en/)中查找出现的任何错误。它会帮助你很多! – deceze 2010-12-20 02:40:33