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

  • Автор темы Автор темы korpus
  • Дата начала Дата начала

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

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

-~{}~ 21.03.09 09:25:

на первый взгляд все нормально.
отлаживай.
 
korpus
if ($result_add=mysql_query($query_add, $connect)) {
while ($row_add=mysql_fetch_row($result_add)) {
....
}
}else{
echo "Ошибка ".mysql_error();
}

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

а в-третьих, какое это имеет отношение к вопросу, если у него и так стоит проверка выполнения запроса, которая, при этом, ничего не выводит?
Выглядит это либо двойным использованием переменной, либо выполнением какого-то постороннего кода.
 
*****
чисто теоретически возможно , что ресурс примет значение,
которое может трактоваться как арифметический ноль ?
вот в этом месте :
if(!$r=mysql_query())

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

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


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

-~{}~ 21.03.09 14:25:

при чем здесь вообще все эти варианты одного и того же?
какое отношение к вопросу?
 
Активист
Чем код проще, тем лучше. 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-предупреждениям.
 
die() хорошая функция. для домашней странички.
когда будешь делать сайты посерьезнее, поймешь, что она лишняя, а пока и так сойдет.

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

-~{}~ 24.03.09 16:03:

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

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

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

-~{}~ 24.03.09 16:05:

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

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

-~{}~ 24.03.09 16:03:


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

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

-~{}~ 24.03.09 16:10:

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

-~{}~ 24.03.09 16:14:

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

-~{}~ 24.03.09 16:18:

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

-~{}~ 24.03.09 16:21:

Автор оригинала: *****
Альтернатива функции die() - сайт с использованием шаблонов.
Вместо die вызывается шаблон с извинениями. после которого можно die, впрочем.
еще можно почитать про исключения, как альтернативу скобкам.
Ух ты, хорошая идея с шаблоном. Особенно если на сайте одни ошибки и будут генерироваться.
 
что значит ПЕРЕД ВЫВОДОМ, если вывод начинается только с получением $result_add?
ты обращаешься к $result_add до того, как ее получил? Ну так чему тогда удивляешься?
 
Разобрался уже. У меня в цикле while была функция mysql_free_result(), которая давала такую ошибку (а ошибка указывала на строку с while). Убрал за пределы цикла while и предупреждение исчезло.
 
Сверху