2012-03-10 50 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'; 
    } 
} 
相关问题