mysql_fetch_assoc()期望参数1为resource,给定null

时间:2011-12-16 10:09:14

标签: php mysql

  

可能重复:
  PHP Error: mysql_fetch_array() expects parameter 1 to be resource, boolean given

我正在尝试在查询后从mysql对象构建一个数组。

查询中返回的数字是68,这就是为什么我认为forloop会很好。但是php不喜欢我在forloop中的代码。

以下是代码:

$result = $db->query("SELECT * FROM `networktariff`");


        $rows = mysql_num_rows($result);

        for ($i= 0; $i<$rows; $i++)
        {

            $tariffs[$i] = mysql_fetch_assoc($result[$i]);


        }

我收到一条错误消息:

  

警告:mysql_fetch_assoc()期望参数1为资源,在第58行的/usr/local/www/apache22/data/quote/index.php中给出null

3 个答案:

答案 0 :(得分:1)

是的,请阅读mysql_fetch_assoc()上的文档。

更好的结构可能是:

while($row = mysql_fetch_assoc($result)) {
  // Do stuff with $row
}

详细说明:$result不包含任何数据。它是一个“资源”句柄,指向MySQL创建的结果集。要访问结果集的数据,请使用mysql_fetch_*并将资源句柄传递给它。每次调用fetch函数时,内部指针都会递增一行。因此,每次MySQL都会获得新数据,直到MySQL到达结果的末尾,此时您将获得FALSE。这就是while()循环工作的原因。

答案 1 :(得分:1)

没有"mysql object"之类的东西 您的$db对象属于某个用户定义的类,并且没有必要向任何人询问此类的行为。

假设query()方法仅使用普通的mysql_query()函数调用,它确实返回resource,而不是对象。

如果您有一个奇怪的想法,即使用某个类来运行查询,那么其余的API函数

$tariffs = array();
$result = $db->query("SELECT * FROM `networktariff`");
while ($row = mysql_fetch_assoc($result) {
  $tariffs[] = $row;
}

我不知道为什么你的类没有一些辅助函数来同时获取整个数据,比如

$tariffs = $db->query2arr("SELECT * FROM `networktariff`");

答案 2 :(得分:1)

打印$result因为$db->query不是标准的php函数,它可能会返回结果集数组。 尝试将$db->query替换为mysql_query

时使用相同的代码