2016-01-14 104 views
1

我的頭兩個while循環正在工作,但是當我加3一個用於以下水平,我得到另一個錯誤:while循環 - 數據庫查詢失敗:

數據庫查詢失敗:你有一個錯誤的SQL語法;檢查對應於你的MySQL服務器版本在1號線

等級1使用 '' 附近正確語法手冊 - 工程

$parentpage_set = mysql_query("SELECT * FROM parentpages", $connection); 
    if (!$parentpage_set) {die("Database query failed: " . mysql_error()); } 
    echo "<ul class=\"subjects\">"; 
    while ($parentpage = mysql_fetch_array($parentpage_set)) {echo "<li>{$parentpage["menu_name"]}</li>"; 
    echo "</ul>"; 

等級2 - 工程

$childpage_set = mysql_query("SELECT * FROM childpages WHERE parentpage_id = {$parentpage["id"]}",$connection); 
    if (!$childpage_set) {die("Database query failed: " . mysql_error()); } 
    echo "<ul class=\"pages\">"; 
    while ($childpage = mysql_fetch_array($childpage_set)) {echo "<li>{$childpage["menu_name"]}</li>"; } 
    echo "</ul>"; 

級別3 - 不工作,如果我評論這我的查詢運行,但當未評論我收到一個錯誤

$subchildpage1_set = mysql_query("SELECT * FROM subchildpages1 WHERE childpage_id = {$childpage["id"]}",$connection); 
    if (!$subchildpage1_set) {die("Database query failed: " . mysql_error()); } 
    echo "<ul class=\pages\">"; 
    while ($subchildpage1 = mysql_fetch_array($subchildpage1_set)) {echo "<li>{$subchildpage1["menu_name"]}</li>"; } 
    echo "</ul>"; 

我仍然需要在導航中添加兩個級別 - 我無法接受我的錯誤,我一直在嘗試撿起它,並且通過很多問題閱讀,有人可以告訴我我的錯誤在哪裏是請

+1

請[停止使用'mysql_ *'函數](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)。 [這些擴展](http://php.net/manual/en/migration70.removed-exts-sapis.php)已在PHP 7中刪除。瞭解[編寫]​​(http://en.wikipedia.org/ wiki/Prepared_statement)語句[PDO](http://php.net/manual/en/pdo.prepared-statements.php)和[MySQLi](http://php.net/manual/en/mysqli.quickstart .prepared-statements.php)並考慮使用PDO,[這真的很簡單](http://jayblanchard.net/demystifying_php_pdo.html)。 –

+1

如果您迴應查詢,您看到了什麼?這是在查詢語法錯誤時應該做的第一件事。 –

+0

做你自己的大忙,做一些基本的關注點分離。至少,在頁面頂部執行數據庫查詢,將結果保存到您需要的結構(某種形式的數組)中,然後在html中迭代數組。混合複雜的PHP與HTML是一個壞主意 - 只是想讀上面的代碼讓我頭疼 - 難怪你正在努力 – Steve

回答

0

你在這裏需要的是調試。

在PHP中進行調試對於這類問題很容易。

您的查詢中出現語法錯誤。看看這個查詢,我猜測有兩個錯誤選項。首先是拼寫錯誤的查詢中的一些關鍵詞。第二個是$ childpage [「id」]有一個空值。在這樣的情況下,生成的查詢將導致:的

"SELECT * FROM subchildpages1 WHERE childpage_id =" 

代替

"SELECT * FROM subchildpages1 WHERE childpage_id = 1" 

例如。

所以你可以在這裏做的是將查詢分配給一個變量並打印出來。考慮到兩種錯誤可能性的假設,還會打印$ childpage [「id」]變量。

調試變量時總是使用var_dump()或print_r()。

例子:

$sql = "SELECT * FROM subchildpages1 WHERE childpage_id = {$childpage["id"]}"; 

var_dump($sql, $childpage["id"]); 
die(); 

$subchildpage1_set = mysql_query($sql, $connection); 

如果$ childpage [ 「身份證」]爲空或空字符串 - 「」,那麼你應該檢查這是爲什麼。

+0

我已經添加了上面的代碼,我得到了這個字符串(50)「SELECT * FROM subchildpages1 WHERE childpage_id =」NULL這是我的表格構造1,id,int(11),No,None,AU TO_INCREMENT: 2,childpage_id,int(11),否,無: 3,menu_name,varchar(70),latin1_swedish_ci,否,無: 4,position,int(3),否,無: 5,可見,tinyint,(1),不,無: 6,內容,文本,latin1_swedish_ci,不,無:我的表格內容不是NULL .1 Review&Index,1,1,0: 2,1,4.1.2指導方針與標準,2,1,0: – Hanna

+0

表格不是空的,我不確定爲什麼php會收到空值 - 我甚至放棄了這兩個表,並重新創建它們,沒有改變,我通過命令提示符登錄到MySQL,並選擇*從.....我的表和MySQL都retured一個值,但PHP仍然不會拿起我的價值,請幫助 – Hanna

+0

對不起,我不明白d明顯地,parentpages是我的主菜單,它的ID爲每個「頁面」,childpages是我的下一級(2)在我的菜單中,parentpage_id將其鏈接到父頁面,subchildpages1是我的3de級菜單childpage_id將它鏈接到2級菜單。看起來我的變量subchildpages1(subchildpages2,subchildpages3)沒有設置,或者從mysql中獲得一個空值,通過cmd將它放到我的sql中,並且在那裏拉出的表都具有預期的值。所有桌子都解鎖了,還有更好的方式讓我做我的導航女巫可以rawurlencode以及? – Hanna