2013-12-13 60 views
0

我完全停留在這段代碼上,希望有人可以幫忙。我有一個名爲「pages」的表的數據庫,它有5列:id,file_name link_name,category,main_cat。不知道它是否重要,但main_cat有tinytext類型,file_name是varchar。查詢得到同一個表中的2列

id | file_name | link_name | category | main_cat 
1 | books  | Books  | books | 1 
2 | fiction  | Fiction  | books | 2 
3 | non-fiction | Non-Fiction | books | 2 
4 | music  | Music  | music | 1 
5 | alternative | Alternative | music | 2 
6 | country  | Country  | music | 2 

在我的導航菜單(下面的代碼),我想知道所有的main_cat(1)上市,然後在子頁面,man_cat(2)下方顯示。這裏是我有的代碼,現在,我已經嘗試了許多不同的方式,包括內部連接和左連接,但無所謂,我不斷收到一個錯誤,說「警告:mysqli_fetch_assoc()期望參數1爲mysqli_result,布爾值在給定的......」

<ul> 
<?php 
    $query = "SELECT * FROM pages WHERE main_cat = 1 ORDER BY link_name ASC "; 
    $main_pages = mysqli_query($conn, $query); 
    confirm_query($main_pages); 
?> 
<?php 
    while($mainpage = mysqli_fetch_assoc($main_pages)) { 
?> 
    <li><a href="/edit.php?<?php echo $mainpage["id"]; ?>"><?php echo $mainpage["link_name"]; ?></a> 

    <?php 
$query = "SELECT * FROM pages WHERE main_cat = 2 AND category = {$mainpage["file_name"]}"; 
$sub_pages = mysqli_query($conn, $query); 
confirm_query($sub_pages); 
    ?> 
    <ul> 
    <?php 
while($subpage = mysqli_fetch_assoc($sub_pages)) { 
    ?> 
<li><a href="/edit.php?<?php echo $subpage["id"]; ?>"><?php echo $subpage["link_name"]; ?></a></li>  
<?php 
} 
?> 
    <?php mysqli_free_result($sub_pages); ?> 
    </ul> 
</li> 
<?php 
} 
?> 
<?php mysqli_free_result($main_pages); ?> 
</ul>  
+0

您可以多次調用mysqli_fetch_assoc,哪一個是不工作的,第一個? –

+0

是的,我不需要調用它兩次,他們是兩個不同的查詢,我有一個查詢主頁面,然後查詢子頁面。子頁面(第二個)是不工作的。謝謝! – user2998254

+0

您的$ conn定義在哪裏? – user2936213

回答

5

這會給你的胃灼熱:

$query = "SELECT * FROM pages WHERE main_cat = 2 AND category = {$mainpage["file_name"]}"; 

的問題是,圍繞file_name"字符被解釋爲結束串,和PHP出現意外現象。換句話說,PHP見此:

$query = "SELECT * FROM pages WHERE main_cat = 2 AND category = {$mainpage["file_name"]}"; 
     //^start string             ^end  ^s ^end again 

嘗試這些選項,而不是一個:

$query = "SELECT * FROM pages WHERE main_cat = 2 AND category = '{$mainpage['file_name']}'"; 
$query = "SELECT * FROM pages WHERE main_cat = 2 AND category = '".$mainpage["file_name"]."'"; 

而且,請注意引號的變量 - 除非file_name實際上是一個數字,你需要用引號括起數據。

最後,這可能不言而喻,但你真的需要在這裏使用準備好的語句。

+0

謝謝!這解決了我的問題......我有一種感覺,那就是引用這樣做......我試圖逃脫它們,但一定是錯了。我也可以這樣做,避開引號?是的,我同意,準備好的陳述是必要的。 – user2998254

+0

很高興幫助!如果你的意思是轉義'file_name'周圍的引號,否則會導致語法錯誤。例如:'$ x = array('foo'=>'bar'); echo「test {$ x [\」foo \「]}」;'throws「**解析錯誤:**語法錯誤,意外的T_CONSTANT_ENCAPSED_STRING,期待T_STRING在第2行」 –

+0

任何想法爲什麼這將是打破如果我將它移動到一個function.php頁面? '函數cms_find_sub_pages(){ \t \t global $ conn; \t \t \t \t $ query =「SELECT * FROM pages WHERE main_cat = 2 AND category ='{$ mainpage [」file_name「]}'」; \t \t $ sub_pages = mysqli_query($ conn,$ query); \t \t confirm_query($ sub_pages); \t \t return $ sub_pages; \t \t} ' – user2998254

0

我認爲這是值得做你的第二個查詢,你可以把它誤格式化......我不是專家,但也許,如果我有錯別人可以編輯。

從這:

$query = "SELECT * FROM pages WHERE main_cat = 2 AND category = {$mainpage["file_name"]}"; 

要這樣:

$mainfilename = $mainpage['file_name']; 

$query = "SELECT * FROM pages WHERE main_cat = 2 AND category = $mainfilename"; 
+0

謝謝,試過了,拋出一個語法錯誤 – user2998254

+0

不知道應該如何寫,但嘗試做我上面編輯過的...? – atomapps

+0

第一個選項需要引用數據才能工作,使用'''會導致問題,因爲'''封裝了整個字符串。第二個選項也缺少數據引用。 –

1

檢查一下您是否連接正確的數據庫和您的查詢在語法上是正確的,如果

$main_pages = mysqli_query($conn, $query);將返回布爾你$conn是沒有正確設置或查詢語法錯誤。

因此,當你火mysqli_fetch_assoc($main_pages)它拋出 「警告:mysqli_fetch_assoc()預計參數1被mysqli_result,布爾在給定的......」 爲,$main_pages是布爾值。

+0

謝謝。如果連接不正確,我根本得不到任何結果但是我確實得到了$ main_pages的結果。我沒有得到的是$ sub_pages的結果,其中category = file_name ... – user2998254

+0

如果您的連接正常,然後嘗試打印查詢並在phpmyadmin中觸發,問題將被追蹤。 – nextgtech

+0

將您的第二個查詢更改爲「SELECT * FROM pages WHERE main_cat = 2 AND category like'」。 $炫魅[ 「FILE_NAME」] 「'」。 – nextgtech

相關問題