2010-08-21 2 views
0

Я получаю сообщение об ошибке на моем сайте, который появился впервые сегодня, несмотря на то, что он функционирует отлично в течение нескольких месяцев.Ошибка Machql fetch array

Предупреждение: mysql_fetch_array(): поставляется аргумент не является допустимым MySQL результатом ресурсов в /web_directory/index.php на линии 33

Вот код от этих линий.

<? $sql = "SELECT 
      p.id as 'id', 
      p.post_title as 'client', 
      (SELECT `meta_value` FROM `wp_postmeta` WHERE `post_id` = p.id AND `meta_key` = 'thumb1') as 'thumb' 
      FROM 
      `wp_posts` p 
      INNER JOIN `wp_postmeta` pm ON (p.id = pm.post_id) 
      INNER JOIN `wp_term_relationships` wtr ON (p.id = wtr.object_id) 
      INNER JOIN `wp_term_taxonomy` tt ON (wtr.term_taxonomy_id = tt.term_taxonomy_id) 
      WHERE 
      tt.term_id = 439 
      AND tt.taxonomy = 'category' 
      AND p.post_status = 'publish' 
      GROUP BY p.id 
      ORDER BY p.id DESC 
      LIMIT 5 
      "; 
    $sql = mysql_query($sql); 
    $i=0; 
    while($s = mysql_fetch_array($sql)) 
    { 
     $i++; 
?> 

Я не оригинальный разработчик сайта, и у меня нет большой информации о mysql. Спасибо за ваши удивительные ответы заранее!

+0

Большинство из 'WHILE' петли missing ... –

+0

Вы должны действительно использовать 'PDO' или' mysqli' вместо расширения 'mysql'. –

+0

Я предполагаю, что строка 33 является 'while ($ s = mysql_fetch_array ($ sql))'? Не могли бы вы заполнить остальную часть цикла while? –

ответ

1

В вашем запросе может потребоваться некорректная ошибка; попробуйте добавить or die(mysql_error()) к mysql_query так:

$sql = mysql_query($sql) or die(mysql_error()); 

mysql_query должен возвращать идентификатор ресурса, который вы можете проверить с:

if (!is_resource($sql)){ 
    die(mysql_error()); 
} 
0

Очевидно, что вы кормите mysql_fetch_array() не является допустимым MySQL результат ресурса.

Это может произойти всякий раз, когда mysql_query сбой по какой-либо причине. (запрос неверный, база данных ушла, сеть не работает и т. д.)

Вы должны проверить, успешно ли вызов mysql_query, прежде чем пытаться перебирать его данные. Если вы добавите чек и распечатаете то, что на самом деле является ошибкой, вы можете закрепить его самостоятельно.

For SELECT, SHOW, DESCRIBE, EXPLAIN and other statements returning resultset, mysql_query() returns a resource on success, or FALSE on error. 

http://php.net/manual/en/function.mysql-query.php

Добавление этого раньше mysql_fetch_array() будет убедиться, что скрипт умирает каждый раз, когда ошибка произошла в том числе реальное сообщение об ошибке:

$res = mysql_query($sql); 
if (!$res) { 
    die('Invalid query: ' . mysql_error()); 
}