Я получаю сообщение об ошибке на моем сайте, которая появилась впервые сегодня, несмотря на то, что она функционирует нормально в течение нескольких месяцев.
Предупреждение: 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. Спасибо за ваши удивительные ответы заранее!
В вашем запросе может быть некоторая ошибка; попробуйте добавить or die(mysql_error())
в mysql_query
следующим образом:
$sql = mysql_query($sql) or die(mysql_error());
mysql_query
должен вернуть идентификатор ресурса, с которым вы можете проверить:
if (!is_resource($sql)){
die(mysql_error());
}
Очевидно, что вы загружаете 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());
}
WHILE
отсутствует ...PDO
илиmysqli
вместо расширенияmysql
.