当我使用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.任何帮助都将非常感谢!!
答案 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
检索的所有其他值。