2012-05-23 72 views
1

我是一個初學者,並試圖得到一個處理PHP。我得到了一個我似乎無法解決的語法錯誤。我會告訴你下面的代碼和我嘗試過的一些修復。如果有人有另一個想法,那將是美好的。謝謝:)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

您正在使用雙引號雙引號字符串中,這就是爲什麼拋出一個錯誤。 – acme

回答

2

嘗試

$page_set = mysql_query("SELECT * FROM pages WHERE id_subjects = '".$subject["id"]."'", $connection); 
       if(!$page_set){ 
        die("Database query failed: " . mysql_error()); 
       } 

BTW你應該從mysql_搬走。 *功能離子。他們正在被棄用,轉移到PDO或mysqli_ *,這也是一個安全很多(你現在很容易受到SQL注入)

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

個人而言,我是第一個解決方案的粉絲,但是,這只是我的看法。

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 
0

你不需要任何報價時帶引號的字符串內,只要使用

"SELECT * FROM pages WHERE id_subjects = {$subject[id]}"