php语法错误 - 初学者

时间:2012-05-23 14:41:00

标签: php mysql phpmyadmin

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

但是得到了同样的错误......

4 个答案:

答案 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]}"