MySQL错误:mysql_fetch_array期望参数1是资源

时间:2012-08-02 02:43:31

标签: php mysql

  

可能重复:
  Warning: mysql_fetch_* expects parameter 1 to be resource, boolean given error

我最近从客户端获得了一项工作,我必须将折旧的php旧代码更改为新代码。在那段代码中,我遇到了mysql_db_query,我将其转换为mysql_query,但错误已经给出了

mysql_fetch_array期望参数1为资源,布尔值为

//the old code was like:

$result = mysql_db_query($mysql_db,"SELECT Hierarchy FROM MenuSystem WHERE LENGTH(Hierarchy) >= 2 AND LOCATE(" . $_SESSION['AccessLevel'] . ",AccessLevels) <> 0;");

//and my new code is :

$result = mysql_query("SELECT Hierarchy FROM MenuSystem WHERE LENGTH(Hierarchy) >= 2 AND LOCATE(" . $_SESSION['AccessLevel'] . ",AccessLevels) <> 0");

请告诉我问题

它指的是第11行,其中是while循环的结束括号

while ($row = mysql_fetch_array($result)) {
    $ConcatHierarchy .= $row["Hierarchy"];
}

2 个答案:

答案 0 :(得分:1)

我看不出唯一的代码会导致错误。但是,如果您想将$ result用作数组,那么可能会出现问题,因为我们需要先检查它。如果查询失败,它将返回FALSE而不是资源,即数组。

(我的意思是你实际上稍后将该资源用作数组。但是,$ result是一个FALSE或resrouce,可以通过调用mysql_fetch_array()来使用。感谢您的评论)

其实您可以查看其他帖子,例如: mysql_fetch_array() expects parameter 1 to be resource problem

如手册所示,ppl现在可能更喜欢PDO:   不鼓励使用此扩展程序。相反,应该使用MySQLi或PDO_MySQL扩展名。

答案 1 :(得分:1)

你正在做一个字符串操作,在缺少引号的东西上把它变成一个字符串:

... AND LOCATE(" . $_SESSION['AccessLevel'] . ",AccessLevels) <> 0");
               ^--                             ^---

指示的点需要单引号(')。现在你可能正在嵌入一些字符串,比如'SuperUser'。没有引号,MySQL看起来就像一个字段名,几乎肯定不存在。

如果你的代码中有适当的错误处理,你会立即从错误信息中看到这一点:

$result = mysql_query(...) or die(mysql_error());
                          ^^^^^^^^^^^^^^^^^^^^^^--- bare minimum