Ошибка массива выборки Mysql

0

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

Предупреждение: 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 отсутствует ...
  • 0
    Вы действительно должны рассмотреть возможность использования PDO или mysqli вместо расширения mysql .
Показать ещё 1 комментарий
Теги:

2 ответа

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() будет уверен, что script умирает всякий раз, когда возникает ошибка, включая фактическое сообщение об ошибке:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню