SQL查询未返回值

时间:2010-12-20 02:22:08

标签: php mysql

当我使用php时,我的sql脚本没有返回值'sid',但是当我在实际数据库上运行它时,它返回值。我无法弄清楚我的错误在哪里。我的表格如下:

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.任何帮助都将非常感谢!!

2 个答案:

答案 0 :(得分:3)

$row[title]不是您正在寻找的语法。如果您enable error reporting,您会看到有关未定义常量的警告。只需编写title,PHP就会找到一个名为“title”的constant,它不存在。只有这样才能回到字符串并尝试,如果你可能意味着字符串'title'SID碰巧是一个预定义的常量,所以这是它使用常量值的唯一时间,并且数组中没有索引的常量值。

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

请阅读"Why is $foo[bar] wrong?" 此外,请阅读有关SQL injection的文章并转发您的意见!

答案 1 :(得分:0)

您没有在查询中转义您的值($ uid,$ user,$ date),并且其中一个或多个包含SQL元字符(可能是引用'),这违反了查询的语法。 / p>

你也没有检查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']

您正在尝试使用不存在的常量“title”来获取数组索引。这也适用于您尝试从$row检索的所有其他值。