我是初学者并试图掌握php。我一直在收到一个我似乎无法解决的语法错误。我将向您展示下面的代码以及我尝试过的一些修复程序。如果有人有另一个想法会很棒。谢谢:))
$subject_set = mysql_query("SELECT * FROM subjects", $connection);
if(!$subject_set){
die("Database query failed: " . mysql_error());
}
while($subject = mysql_fetch_array($subject_set)) {
echo "<li> {$subject['menu_name']} </li>";
}
$page_set = mysql_query("SELECT * FROM pages WHERE id_subjects = {$subject["id"]}", $connection);
if(!$page_set){
die("Database query failed: " . mysql_error());
}
echo "<ul class='pages'>";
while($page = mysql_fetch_array($page_set)) {
echo "<li> {$page['menu_name']} </li>";
}
echo "</ul>";
我得到:数据库查询失败:您的SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在第1行
附近使用正确的语法我知道问题出在{$ subject [“id”]},因为当我输入“WHERE id_subjects = 1”时,我得到了内容并且没有错误。我试过了:
{$subject['id']}
{$subject[\"id\"]}
但是得到了同样的错误......
答案 0 :(得分:2)
试
$page_set = mysql_query("SELECT * FROM pages WHERE id_subjects = '".$subject["id"]."'", $connection);
if(!$page_set){
die("Database query failed: " . mysql_error());
}
顺便说一句。你应该真的远离mysql_ *函数。它们被弃用,转移到PDO或mysqli_ *,这也更安全(你现在很容易被sql注入)
答案 1 :(得分:0)
如果您回复自己的帖子,可以清楚地看到这里出了什么问题。
"SELECT * FROM pages WHERE id_subjects = {$subject["id"]}"
正如你所看到的那样&#34; id&#34;没有与剩下的其他人联系。那是因为&#34;你关闭了字符串。
要解决此问题,只需使用
即可"SELECT * FROM pages WHERE id_subjects = " . $subject["id"]
或者如果你真的想把变量放在字符串中,你可以使用一个带引号的字符串作为键:
"SELECT * FROM pages WHERE id_subjects = {$subject['id']}"
就个人而言,我是第一个解决方案的粉丝。但这只是我的意见。
答案 2 :(得分:0)
当while循环完成循环时,它将耗尽所有结果。 $subject['id']
将不会有任何信息,因为$ subject不再有任何条目。
我猜你想首先列出所有主题,然后是每个主题下面的所有页面。
使用mySQL并不会很漂亮,但这就是你想做的事情。 (正如Bono所说的那样使用PDO或mysqli,但这里的psuedocode解决方案可以与mySQL一起工作)。
loop through first query
print subject name
select pages using subject id
loop through pages under that subject id
print page names
答案 3 :(得分:0)
在引用的字符串中不需要任何引号,只需使用
即可"SELECT * FROM pages WHERE id_subjects = {$subject[id]}"