根据文档:
对于 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
}
}