我是一个初学者,试图掌握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'"]}
但是得到了同样的错误...
试试
$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注入的影响)
如果你回读你的帖子,你可以清楚地看到这里出了什么问题。
"SELECT * FROM pages WHERE id_subjects = {$subject["id"]}"
如您所见,"id"未连接到其余部分。这是因为使用 " 你关闭字符串。
要解决此问题,只需使用
"SELECT * FROM pages WHERE id_subjects = " . $subject["id"]
或者,如果您真的想将变量放在字符串中,则可以使用单引号字符串作为键:
"SELECT * FROM pages WHERE id_subjects = {$subject['id']}"
就个人而言,我是第一个解决方案的粉丝。但这只是我的意见。
当while循环完成循环时,它将耗尽所有结果。 $subject['id']
不会有任何信息,仅仅是因为$subject不再有任何条目。
我猜你想先列出所有主题,然后列出每个主题下的所有页面。
使用mySQL不会很漂亮,但这就是你想要做的。 (正如Bono所说,使用PDO或mysqli,但这里有一个可以与mySQL一起使用的伪代码解决方案)。
loop through first query
print subject name
select pages using subject id
loop through pages under that subject id
print page names
在带引号的字符串中不需要任何引号,只需使用
"SELECT * FROM pages WHERE id_subjects = {$subject[id]}"