PHP 语法错误 - 初学者


php syntax error - beginner

我是一个初学者,试图掌握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]}"