1

私は初心者で、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構文にエラーがあります。1行目の"の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

「WHEREid_subjects=1」を入力してもコンテンツが返され、エラーが発生しなかったため、問題は{$subject["id"]}にあることがわかりました。私はもう試した:

{$subject['id']}
{$subject[\"id\"]}

しかし、同じエラーが発生しました...

4

4 に答える 4

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インジェクションに対して脆弱になりました)

于 2012-05-23T14:42:45.680 に答える
0

引用符で囲まれた文字列内では引用符は必要ありません。使用するだけです。

"SELECT * FROM pages WHERE id_subjects = {$subject[id]}"
于 2012-05-23T14:51:16.477 に答える
0

投稿を読み返すと、ここで何が問題になっているのかがはっきりとわかります。

"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']}"

個人的に私は最初の解決策のファンです。しかし、それは私の意見です。

于 2012-05-23T14:45:51.510 に答える
0

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
于 2012-05-23T14:47:49.480 に答える