0

可能重复:
警告:mysql_fetch_* 期望参数 1 是资源,布尔给定错误

我最近从一个客户那里得到了一份工作,我必须将折旧的 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"];
}
4

2 回答 2

1

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

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

实际上您可以查看其他帖子,例如: mysql_fetch_array() 期望参数 1 是资源问题

仅供参考,正如手册所建议的那样,人们现在可能更喜欢 PDO: 不鼓励使用此扩展。相反,应该使用 MySQLi 或 PDO_MySQL 扩展。

于 2012-08-02T02:51:39.893 回答
1

您正在对缺少引号的东西进行字符串操作以使其成为字符串:

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

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

如果您在代码中进行了适当的错误处理,您会立即从错误消息中看到这一点:

$result = mysql_query(...) or die(mysql_error());
                          ^^^^^^^^^^^^^^^^^^^^^^--- bare minimum
于 2012-08-02T03:33:40.500 回答