0

可能重复:
mysql_fetch_array() 期望参数 1 是资源,选择中给出的布尔值

上次检查时我的代码运行良好,但现在它似乎坏了。这是错误:

    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /home/nerblog/public_html/nerblog/arch.php on line 4

...这是第 4 行的代码:

    $q = mysql_query("SELECT * FROM main WHERE month='$month' AND year='$year' LIMIT 12 ORDER BY id DESC");

    while ($sql = mysql_fetch_array($q ))
4

3 回答 3

3

您的 SQL 查询失败。尝试将“ORDER”之后的“LIMIT”命令移动到查询的末尾:

SELECT * FROM main WHERE month='$month' AND year='$year' ORDER BY id DESC LIMIT 12
于 2012-05-09T23:01:32.420 回答
2

根据文档:

对于 SELECT、SHOW、DESCRIBE、EXPLAIN 和其他返回结果集的语句,mysql_query() 成功时返回资源,错误时返回 FALSE。

对于其他类型的 SQL 语句,INSERT、UPDATE、DELETE、DROP 等,mysql_query() 在成功时返回 TRUE,在错误时返回 FALSE。

如果用户无权访问查询引用的表,mysql_query() 也会失败并返回 FALSE。

mysql_fetch_array() 函数需要 mysql_query 返回的结果资源。如果该调用失败,它将返回 false,这就是您传递给 mysql_fetch_array() 函数的内容,因此它失败了。

问题实际上出在您的 SQL 中。您需要LIMIT在查询中将子句放在最后:

 SELECT * FROM main WHERE month='$month' AND year='$year' ORDER BY id DESC LIMIT 12 

确保查询中的错误不会渗入其他代码的一种方法是首先检查该值:

$q = mysql_query("SELECT * FROM main WHERE month='$month' AND year='$year' ORDER BY id DESC LIMIT 12");

if($q != FALSE)
{
   // Query didn't fail, so get results
   while ($result = mysql_fetch_array($q))
   {
      // Do something with $result
   }

}
于 2012-05-09T23:08:33.183 回答
1

mysql_error()存在是有原因的。

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“ORDER BY id DESC”附近使用正确的语法

这意味着它没想到会看到ORDER BY你把它放在哪里。原因是LIMIT应该在之后 ORDER BY,而不是之前。

于 2012-05-09T23:03:34.653 回答