2012-11-28 89 views
3

我有一個名爲'catalog'的數據庫和一個名爲'categories'的表。該表按此順序排列3列:categoryId,categoryName,parentCategory。我試圖抓住具有parentCategory ='root'的每一行的categoryId和categoryName。我認爲這是一個簡單的查詢,但我顯然做錯了,因爲我不斷收到消息 - 無法執行查詢 - 但沒有顯示mysql錯誤。我已經在下面發佈了我的代碼。任何人都可以直接點我嗎?mysqli查詢失敗,沒有錯誤

P.S.我的值賦給了$ db變量;我只是沒有在這裏包括這些。

<?php 
$connect = mysqli_connect($db_host,$db_user,$db_password,$db_database) 
    or die ("Couldn't connect to server: ".mysqli_error()); 

function display_children($parent) { 
    $query = "SELECT categoryId, categoryName FROM `categories` WHERE parentCategory=".$parent; 
    $result = mysqli_query($connect,$query) 
     or die ("Couldn't execute query: ".mysqli_error()); 

    echo "<ul>"; 
    while ($row = mysqli_fetch_assoc($result)) { 
      echo "<li>".$row['categoryName']."</li>"; 
      display_children($row['categoryId']); 
    } 
    echo "</ul>"; 
    mysqli_close($connect); 
} 

?> 

<div class="menu">  
<?php 
    /* Menu Write */ 
    display_children("root"); 
?> 
</div> 
+2

請,如果你使用'mysqli',這是一件好事,可以使用** SQL佔位符**。你在這裏做什麼是非常危險的。你的查詢應該包含'WHERE parentCategory =?',你應該調用['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)來關聯佔位符值。 – tadman

+0

@tadman - 我會看看佔位符。感謝您的反饋意見! – Leann

+0

它不應該是一個大問題,你只是一條線,而不是以這種方式工作。如果你以有紀律的方式使用它們,你幾乎不可能引入破壞性的[SQL注入漏洞](http://bobby-tables.com/php)。 – tadman

回答

6

的display_children ()函數無法訪問$ connect變量。

試試這個:

function display_children($parent) { 
    global $connect; 
    $query = "SELECT categoryId, categoryName FROM `categories` WHERE parentCategory=".$parent; 
    $result = mysqli_query($connect,$query) 
     or die ("Couldn't execute query: ".mysqli_error()); 

    echo "<ul>"; 
    while ($row = mysqli_fetch_assoc($result)) { 
      echo "<li>".$row['categoryName']."</li>"; 
      display_children($row['categoryId']); 
    } 
    echo "</ul>"; 
    mysqli_close($connect); 
} 
+0

Yipee!這工作很好!我從來沒有想到查詢在函數內部找不到$ connect。謝謝!! – Leann

+0

不客氣Bethany。 :)請點擊左側櫃檯下方的複選標記,隨時選擇我的答案。 –

0

我相信,你只需要在報價查詢的$parent值。

$query = "SELECT categoryId, categoryName FROM `categories` 
      WHERE parentCategory = '" . $parent . "'"; 

希望這有助於!

+0

上面的建議與KayakJim的回答結合起來。但是我也發現,連接並不是查詢工作所必需的。在查詢的雙引號內圍繞變量的單引號。感謝您的反饋! – Leann

0

mysqli_error()需要與數據庫的鏈接作爲參數。

因此,對於錯誤的代碼看起來像這樣,那麼:

or die ("error: " +mysqli_error($connect)); 

這也說明如下: http://php.net/manual/en/mysqli.error.php

Mayby這有助於錯誤報告...

+1

我嘗試將$ connect變量添加到mysqli_error()中,但它沒有改變任何東西。仍然沒有錯誤報告。 – Leann