【问题标题】:How to fix Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in? [duplicate]如何修复警告:mysql_fetch_array() 期望参数 1 是资源,给出的布尔值? [复制]
【发布时间】:2012-03-10 17:01:48
【问题描述】:

可能重复:
PHP: Warning: sort() expects parameter 1 to be array, resource given

我不断收到以下消息 警告:mysql_fetch_array() 期望参数 1 是资源,在第 22 行的 C:\xampp\htdocs\test\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';
    } 

}

【问题讨论】:

  • 您的mysql_query 可能正在生成 MySQL 错误,但您似乎没有任何错误处理代码。尝试先添加一些,例如检查 mysql_query 的返回值是否计算为 true,如果不是,则显示或记录 mysql_error 的输出。
  • @AnotherCode 虽然你大体上是对的,但 mysql 错误信息相当模糊,可以提供一点帮助

标签: php sql


【解决方案1】:

这意味着mysql_query执行查询失败,你应该使用mysql_error()查看错误信息。

在这种情况下,您似乎缺少一个 AND:

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

(请查看PDO。)

【讨论】:

  • +1 ... 还不是 PDO,PDO 不适合初学者。他必须先学习一些mysql基础知识:)
  • 感谢链接,我去看看
【解决方案2】:

您的查询中有错误(忘记了and)。试试这个

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

【讨论】:

    【解决方案3】:

    您遇到了 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
    

    绝不假定查询已成功。

    【讨论】:

    • 感谢您的快速回复。我对这一切都很陌生,我缺乏很多知识,我会尽量记住这一点
    【解决方案4】:

    WHERE 子句的查询中缺少 AND

        $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");
    

    【讨论】:

      【解决方案5】:

      尝试使 $row 成为一个数组:

      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';
          } 
      }
      

      【讨论】:

        【解决方案6】:

        从数字中删除引号。

        Tier=1
        

        另外通过在 phpmyadmin 中运行来检查你的 sql 以检查它是否运行。

        【讨论】:

          猜你喜欢
          • 2013-07-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-20
          • 1970-01-01
          相关资源
          最近更新 更多