可能重复:
mysql_fetch_array() expects parameter 1 to be resource, boolean given in select
我的代码在我检查后工作正常,但现在它似乎已经坏了。这是错误:
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 ))
答案 0 :(得分:3)
您的SQL查询失败。尝试将“ORDER”后面的“LIMIT”命令移动到查询结尾:
SELECT * FROM main WHERE month='$month' AND year='$year' ORDER BY id DESC LIMIT 12
答案 1 :(得分:2)
根据文件:
对于SELECT,SHOW,DESCRIBE,EXPLAIN和其他返回结果集的语句,mysql_query()会在成功时返回资源,或者在出错时返回FALSE。
对于其他类型的SQL语句,INSERT,UPDATE,DELETE,DROP等,mysql_query()成功时返回TRUE,错误时返回FALSE。
如果用户没有访问查询引用的表的权限,则mysp_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
}
}
答案 2 :(得分:1)
mysql_error()
存在是有原因的。
您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第1行的“ORDER BY id DESC”附近使用正确的语法
意思是它没有期望看到你放置它的ORDER BY
。原因是LIMIT
应该在 ORDER BY
之后来,而不是之前。