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