Почему появляется предупреждение у функции mysql_fetch_row

korpus

злой бобёр
Почему появляется предупреждение у функции mysql_fetch_row

Вопрос по mysql совместно с php.
Я обращаюсь к базе при помощи скриптов php и у меня выводится непонятное мне предупреждение. Сам скрипт выполняется нормально, но не хочется иметь всякие предупреждения при обращении к базе.
Использую php5. Версия базы MYSQL5.

Идея скрипта такова, что из одной таблицы table1 читается какое-то сообщение, с котором связанны данные из другой таблицы table2 которые тут же выводятся в браузер.

PHP:
$query="select id, number, text, email, telefon from table1 order by id";
if (!$result=mysql_query($query, $connect)) { echo "Ошибка при извлечении сообщений из таблицы table1"; die(); }
while ($row=mysql_fetch_row($result)) 	{
  $id=$row[0];
  $number=$row[1];
  $text=$row[2];
  $email=$row[3];
  $telefon=$row[4];
  echo $text."<br />".$email."<br />".$telefon;
//тут же извлекаются данные из другой таблицы table2
  $query_add="select id, public, o_text from table2 where id='".$number."'";
  if (!$result_add=mysql_query($query_add, $connect)) { echo "Ошибка при извлечении данных из таблицы table2"; die(); }
  while ($row_add=mysql_fetch_row($result_add)) {
    $id_add=$row_add[0];
    $public_add=$row_add[1];
    $o_text_add=$row_add[2];
    echo "Дата: ".$o_text."<br />Текст: ".$o_text;
  }
}
Первое сообщение и данные из таблицы table2 извлекаются нормально, затем появляются предупреждения, относящиеся к первой функции mysql_fetch_row

Warning: mysql_fetch_row(): 11 is not a valid MySQL result resource

Далее при каждом выполнении функции mysql_fetch_row выводятся такие же предупреждения, а число постоянно увеличивается на 2.
Warning: mysql_fetch_row(): 13 is not a valid MySQL result resource

Что это за предупреждения и если можно, посоветуйте, как исправить скрипт, чтобы этого не было?
 

Фанат

oncle terrible
Команда форума
korpus
вопрос, имеющий косвенное отношение к твоей проблеме.
ты никогда не слышал о форматировании кода с помощью отступов? когда подчиненные блоки пишутся с большим отступом чем те, в которые они вложены?

-~{}~ 21.03.09 09:25:

на первый взгляд все нормально.
отлаживай.
 

antson

Новичок
Партнер клуба
korpus
if ($result_add=mysql_query($query_add, $connect)) {
while ($row_add=mysql_fetch_row($result_add)) {
....
}
}else{
echo "Ошибка ".mysql_error();
}

так надежнее
 

Фанат

oncle terrible
Команда форума
antson
надежнее, во-первых, шаблонами, а, во-вторых,
}else{
echo "Ошибка ";
trigger_error(mysql_error());
}

а в-третьих, какое это имеет отношение к вопросу, если у него и так стоит проверка выполнения запроса, которая, при этом, ничего не выводит?
Выглядит это либо двойным использованием переменной, либо выполнением какого-то постороннего кода.
 

antson

Новичок
Партнер клуба
*****
чисто теоретически возможно , что ресурс примет значение,
которое может трактоваться как арифметический ноль ?
вот в этом месте :
if(!$r=mysql_query())

korpus
классика из мана:
$r=mysql_query() or die();
 

Активист

Активист
Команда форума
antson

> $r=mysql_query() or die();
Бред. Используется это исключительно новичками.


if (($r=mysql_query()) === false)
Это правильно.
 

x-yuri

Новичок
чисто теоретически возможно , что ресурс примет значение,
которое может трактоваться как арифметический ноль ?
вот в этом месте :
if(!$r=mysql_query())
а можно подробнее? Что за ситуация такая?
 

Фанат

oncle terrible
Команда форума
antson
я думаю, что невозможно
при чем тут это?

-~{}~ 21.03.09 14:25:

при чем здесь вообще все эти варианты одного и того же?
какое отношение к вопросу?
 

korpus

злой бобёр
Активист
Чем код проще, тем лучше. or die() действительно не нужно писать.

-~{}~ 24.03.09 15:51:

mysql_error() выводит пустую строку.
Я применяю конструкцию
Код:
 if (!$result_add=mysql_query($query_add, $connect)) { echo "Ошибка при извлечении данных из таблицы table2"; die(); }
чтобы не плодить лишние скобки, в которых можно запутаться. Дальше код продолжается без скобок, что проще.

-~{}~ 24.03.09 15:56:

Автор оригинала: *****
Выглядит это либо двойным использованием переменной, либо выполнением какого-то постороннего кода.
Я так думаю, что проблема во вложенности функций while. Вообще очень непонятное предупреждение, т.к. вывод всех данных в браузер всё таки происходит. Значит это всё таки корректный "MySQL result resource". Может это баг какой? Нужен спец по этим mysql-предупреждениям.
 

Фанат

oncle terrible
Команда форума
die() хорошая функция. для домашней странички.
когда будешь делать сайты посерьезнее, поймешь, что она лишняя, а пока и так сойдет.

везде, где выводит Warning, перед этой строчкой пишешь
var_dump(переменная с результатом запроса);

-~{}~ 24.03.09 16:03:

Нужен спец по этим mysql-предупреждениям.
проблема не в предупреждениях, а в твоем кривом коде.
чем раньше ты это усвоишь, тем быстрее научишься решать свои проблемы.
 

korpus

злой бобёр
Автор оригинала: *****
die() хорошая функция. для домашней странички.
когда будешь делать сайты посерьезнее, поймешь, что она лишняя, а пока и так сойдет.

везде, где выводит Warning, перед этой строчкой пишешь
var_dump(переменная с результатом запроса);
А какая альтернатива такому запросу к базе? Можете написать?

И насчёт последнего предложения объясните что конкретно надо писать в коде и что это даст?

-~{}~ 24.03.09 16:05:

Автор оригинала: *****
die() хорошая функция. для домашней странички.
когда будешь делать сайты посерьезнее, поймешь, что она лишняя, а пока и так сойдет.

везде, где выводит Warning, перед этой строчкой пишешь
var_dump(переменная с результатом запроса);

-~{}~ 24.03.09 16:03:


проблема не в предупреждениях, а в твоем кривом коде.
чем раньше ты это усвоишь, тем быстрее научишься решать свои проблемы.
У меня на сайте несколько тыщ строчек кода. Это один вопрос, который у меня возник по ходу.
 

Фанат

oncle terrible
Команда форума
Какому запросу? зачем тебе понадобилась альтернатива запросу?

Это даст тебе содержание переменной, на которую ругается пхп. Если пхп пишет, что переменная передаваемая в mysql_fetch_row, неправильная, то эту переменную надо вывести и на нее посмотреть - что в ней лежит. Информацию о переменной выводит функция var_dump()
поэтому перед 11 и 14 строчками надо ее написать.
Надеюсь, это не слишком сложно для понимания.

-~{}~ 24.03.09 16:10:

У меня на сайте несколько тыщ строчек кода.
- дура, нашла чем гордиться (с) анекдот
 

korpus

злой бобёр
var_dump() получится просмотреть результат выборки из базы $result_add?
ок, намёк понял

-~{}~ 24.03.09 16:14:

Автор оригинала: *****
Какому запросу? зачем тебе понадобилась альтернатива запросу?
Альтернатива функции die().
 

Фанат

oncle terrible
Команда форума
11 строчка - это строчка с $result_add? или это 13?
или эта строчка у нас под фиговым листком комментария с извлечением данных, а ты хочешь, чтобы мы нашли тебе ошибку в том участке кода, который ты не написал?

-~{}~ 24.03.09 16:18:

Альтернатива функции die() - сайт с использованием шаблонов.
Вместо die вызывается шаблон с извинениями. после которого можно die, впрочем.
еще можно почитать про исключения, как альтернативу скобкам.
 

korpus

злой бобёр
Каждый раз перед выводом данных из таблицы table2 выводятся эти предупреждения. Вообще я попробую var_dump() поглядеть, может что и увижу неправильное :)

-~{}~ 24.03.09 16:21:

Автор оригинала: *****
Альтернатива функции die() - сайт с использованием шаблонов.
Вместо die вызывается шаблон с извинениями. после которого можно die, впрочем.
еще можно почитать про исключения, как альтернативу скобкам.
Ух ты, хорошая идея с шаблоном. Особенно если на сайте одни ошибки и будут генерироваться.
 

Фанат

oncle terrible
Команда форума
что значит ПЕРЕД ВЫВОДОМ, если вывод начинается только с получением $result_add?
ты обращаешься к $result_add до того, как ее получил? Ну так чему тогда удивляешься?
 

korpus

злой бобёр
Разобрался уже. У меня в цикле while была функция mysql_free_result(), которая давала такую ошибку (а ошибка указывала на строку с while). Убрал за пределы цикла while и предупреждение исчезло.
 
Сверху