2012-03-10 141 views
-1

Possible Duplicate:
PHP: Warning: sort() expects parameter 1 to be array, resource given如何解決警告:mysql_fetch_array()期望參數1是資源,布爾值在?

我不斷收到以下消息警告:mysql_fetch_array()預計參數1是資源,在布爾C中給出:在第22行 但是,當\ XAMPP \ htdocs中\測試\ test.class.php我檢查代碼,我看不出有什麼不對......

<?php 
// Main menu items 
$sql=mysql_query("SELECT * FROM category WHERE tier='1' ORDER BY id ASC"); 
while($row = mysql_fetch_array($sql)){  
    $p_id= $row["id"]; 
    $p_category_name= $row["category_name"]; 
    $mainMenu[''.$p_category_name.'']= $p_id; 

    $sql_1=mysql_query("SELECT * FROM category WHERE tier='2' parent='$p_id' ORDER BY id ASC"); 
    while($row_1 = mysql_fetch_array($sql_1)){ **This is line 22** 
     $c_id= $row_1["id"]; 
     $c_category_name= $row_1["category_name"]; 
     $subMenu[''.$p_category_name.''][''.$c_category_name.''] = 'product1.php'; 
    } 

} 
+0

你'mysql_query'很可能產生一個MySQL錯誤,但你似乎沒有任何錯誤處理代碼。先嚐試添加一些,例如通過檢查「mysql_query」的返回值是否爲「true」,如果不是,則顯示或記錄「mysql_error」的輸出。 – 2012-03-10 17:04:15

+0

@AnotherCode雖然你是對的一般,但mysql錯誤信息是相當模糊的,可以幫助一點點 – 2012-03-10 17:13:14

回答

3

這意味着mysql_query未能執行查詢,你應該使用mysql_error()看到錯誤消息。

在這種情況下,它看起來像你缺少一個AND:

$sql_1=mysql_query("SELECT * FROM category WHERE tier='2' AND parent='$p_id' ORDER BY id ASC");

(而請看PDO

+0

...而不是PDO,PDO對初學者不好。他必須先學習一些mysql基礎知識:) – Wh1T3h4Ck5 2012-03-10 17:20:09

+0

感謝您的鏈接,我會去檢查一下 – JimmyV 2012-03-10 17:22:46

3

您在查詢中有一個錯誤(忘了and)。試試這個

SELECT * FROM category WHERE tier='2' and parent='$p_id' ORDER BY id ASC 
-4

從NUMERICS刪除引號。

Tier=1 

加上通過在phpmyadmin中運行檢查你的sql來檢查它是否運行。

2

你有一個SQL語法錯誤:

$sql_1=mysql_query("SELECT * FROM category WHERE tier='2' parent='$p_id' ORDER BY id ASC"); 
                 ^-- missing ' AND ' 

如果你有正確的錯誤代碼中的處理,你已經看到了這一點:

$sql_1 = mysql_query(...) or trigger_error(mysql_error()); 
         ^^^^^^^^^^^^^^^^^^^^^^--- bare mininum handling 

NEVER假設查詢已成功。

+0

感謝您的快速回復。我對這一切都很陌生,我缺乏很多知識,我會盡量保持這種想法 – JimmyV 2012-03-10 17:09:37

+2

**絕不** ** – 2012-03-10 17:09:50

1

,並從該查詢的WHERE子句中缺少

$sql_1=mysql_query("SELECT * FROM category WHERE tier='2' parent='$p_id' ORDER BY id ASC"); 

它應該是:

$sql_1=mysql_query("SELECT * FROM category WHERE tier='2' AND parent='$p_id' ORDER BY id ASC"); 
0

嘗試使$行的一個數組:

while($row[] = mysql_fetch_array($sql)) 

確保所有查詢如下:

$sql = mysql_query("SELECT * FROM category WHERE tier='1' ORDER BY id ASC") or die(mysql_error()); 

http://php.net/manual/en/function.mysql-fetch-array.php

此外,我認爲你應該使用mysql_fetch_assoc(); http://www.php.net/manual/en/function.mysql-fetch-assoc.php

試試這個:

$sql = "SELECT * FROM category WHERE tier='1' ORDER BY id ASC"; 
$fetch = mysql_fetch_assoc(mysql_query($sql)) or die(mysql_error()); 
while ($row = $fetch) { 
    $p_id = $row["id"]; 
    $p_category_name = $row["category_name"]; 
    $mainMenu[''.$p_category_name.'']= $p_id; 

    $sql_1 = "SELECT * FROM category WHERE tier='2' AND parent='$p_id' ORDER BY id ASC"; 
    $fetch_1 = mysql_fetch_assoc(mysql_query($sql_1)) or die(mysql_error()); 
    while ($row_1 = $fetch_1) { 
     $c_id = $row_1["id"]; 
     $c_category_name = $row_1["category_name"]; 
     $subMenu[''.$p_category_name.''][''.$c_category_name.''] = 'product1.php'; 
    } 
} 
相關問題