【问题标题】:MySQL error: mysql_fetch_array expects parameter 1 to be resource [duplicate]MySQL错误:mysql_fetch_array期望参数1是资源[重复]
【发布时间】:2012-07-31 00:06:23
【问题描述】:

可能重复:
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"];
}

【问题讨论】:

  • 您需要在代码中找到错误发生的位置并在此处发布。错误应说明行号和源文件。
  • 为了您的信息,您正在用已弃用的代码替换已弃用的代码。考虑使用 PDO 或 MySQLi 而不是旧的 mysql_ 函数。
  • 我已经编辑了问题,现在您可以看到错误行
  • 这确实是你的问题...在将 if ($result == false) { ... } 传递给 mysql_fetch_array 之前对其进行测试。
  • 查询字符串的语法有什么问题吗??

标签: php mysql


【解决方案1】:

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

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

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

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

【讨论】:

  • $result 不会是一个数组,它会是一个从 mysql_fetch_array 返回数组的对象。无论哪种方式,这很可能是您的问题。在将 $result 传递给 mysql_fetch_array 之前对其进行测试。当然,除了更好的错误处理之外,if ($result == False) { die(); } 之类的东西。尽可能使用例外。
  • 我已经编辑了问题,现在您可以看到错误行
  • 查询字符串的语法有什么问题吗??
  • 也许你先在workbench之类的任何查询工具中尝试sql语句?首先我以为你有一个重复的字段名和表名,但在我尝试之后实际上是允许的。现在不太确定...
  • 抱歉忽略我之前的。我以为表名是 Hierarchy 但实际上是 MenuSystem。无论如何,只需 echo mysql_error() 即可查看错误是什么。
【解决方案2】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-11
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 2013-04-03
    相关资源
    最近更新 更多