2012-05-09 3 views
0

Possible Duplicate:
mysql_fetch_array() expects parameter 1 to be resource, boolean given in selectPHP: SQL клещи, не имеет никакого смысла

Мой код работает отлично в прошлом я проверил, но теперь, кажется, сломаны. Здесь ошибка:

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-запрос не удается. Попробуйте команду движущуюся «LIMIT» после того, как «заказ» в конце запроса:

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

Он работает, большое вам спасибо! –

1

mysql_error() существует по причине.

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY id DESC' at line 1

Значение не ожидал увидеть ORDER BY, где вы положили его. Причиной этого является то, что LIMIT должен наступить послеORDER BY, не раньше.

2

В соответствии с документацией:

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 
    } 

} 
Смежные вопросы