В соответствии с документацией:
For SELECT, SHOW, DESCRIBE, EXPLAIN and other statements returning resultset, mysql_query() returns a resource on success, or FALSE on error.
For other type of SQL statements, INSERT, UPDATE, DELETE, DROP, etc, mysql_query() returns TRUE on success or FALSE on error.
mysql_query() will also fail and return FALSE if the user does not have permission to access the table(s) referenced by the query.
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
}
}
Это логическое значение, потому что ваш запрос недействителен –