Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Что за странный тип?
 
 автор: Eugene77   (01.04.2009 в 18:10)   письмо автору
 
 

В от такой фрагмент кода есть у меня:
<?
    $q
="SELECT * FROM $prefix"."on_line WHERE login=".$login['id'];
    
$r=mysql_query($q) or sql_err($q__FILE____LINE__);
    if(!
$r) return;
    if(
$r == NULL) return;
    if(
mysql_num_rows($r)<1) return;
    if(!
is_resource($r))  return;
    while(
$on_line=mysql_fetch_assoc($r)){ 



Он периодически рушит мне всю страницу
сообщением:


Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/utils.inc on line 734


Которое, уже в свою очередь, создаёт проблему с отсылкой заголовков.

В чём тут может быть ошибка?

  Ответить  
 
 автор: nikita2206   (01.04.2009 в 19:18)   письмо автору
 
   для: Eugene77   (01.04.2009 в 18:10)
 

вы написали в запросе WHERE login=".$login['id']; но если в логине присутсвуют нецифровые символы, то mysql считает это ошибкой т.к. нужно расставить кавычки вокруг логина:

<? 
    $q
="SELECT * FROM $prefix"."on_line WHERE login='".$login['id'].'\''
    
$r=mysql_query($q) or sql_err($q__FILE____LINE__); 
    if(!
$r) return; 
    if(
$r == NULL) return; 
    if(
mysql_num_rows($r)<1) return; 
    if(!
is_resource($r))  return; 
    while(
$on_line=mysql_fetch_assoc($r)){ 

  Ответить  
 
 автор: Eugene77   (01.04.2009 в 20:15)   письмо автору
 
   для: nikita2206   (01.04.2009 в 19:18)
 

Действительно, как я не подумал?!

Попробую исправить.
Хотя ошибки от MySQL я на этом участкекоданикогда не получал.
Именно mysql_fetch_assoc($r) почему-то упирается.

  Ответить  
 
 автор: nikita2206   (01.04.2009 в 20:23)   письмо автору
 
   для: Eugene77   (01.04.2009 в 20:15)
 

всё правильно! если ошибка в sql запросе, то пхп выдает ее лишь на уровне сортировки(mysql_fetch*) массива

  Ответить  
 
 автор: Eugene77   (02.04.2009 в 18:01)   письмо автору
 
   для: nikita2206   (01.04.2009 в 20:23)
 

Пока вроде работает.
Спасибо!
Хоть я и не понял, почему MySQL сама ошибку не выдаёт.
Обычно, если ошибка, то просто возвращает false вместо результата.
А тут что-то странное возвращается.

  Ответить  
 
 автор: Commander   (03.04.2009 в 06:15)   письмо автору
 
   для: Eugene77   (02.04.2009 в 18:01)
 

>Хоть я и не понял, почему MySQL сама ошибку не выдаёт.

А как MySQL может выдать ошибку???
Просто MySQL выдает в качестве результата false, а PHP при сортировке в mysql_fetch... выбрасывает ошибку, поскольку не может обработать возвращенный базой данных результат, поскольку он представляет собой просто константу false.

  Ответить  
 
 автор: Eugene77   (03.04.2009 в 14:35)   письмо автору
 
   для: Commander   (03.04.2009 в 06:15)
 

>>Хоть я и не понял, почему MySQL сама ошибку не выдаёт.
>
>А как MySQL может выдать ошибку???
>Просто MySQL выдает в качестве результата false, а PHP при сортировке в mysql_fetch... выбрасывает ошибку, поскольку не может обработать возвращенный базой данных результат, поскольку он представляет собой просто константу false.

Если так, то почему они одно из условий
<?
    
if(!$r) return;  
    if(
$r == NULL) return;  
    if(
mysql_num_rows($r)<1) return;  
    if(!
is_resource($r))  return;

не срабатывает?

  Ответить  
 
 автор: constanta   (04.04.2009 в 02:57)
 
   для: Eugene77   (03.04.2009 в 14:35)
 

Потому что под маской.

  Ответить  
 
 автор: Eugene77   (04.04.2009 в 14:30)   письмо автору
 
   для: constanta   (04.04.2009 в 02:57)
 

А где про эту маску почитать?

  Ответить  
 
 автор: Eugene77   (08.04.2009 в 22:26)   письмо автору
 
   для: constanta   (04.04.2009 в 02:57)
 

Ау! Кто может про маску пояснить?

  Ответить  
 
 автор: Trianon   (08.04.2009 в 22:28)   письмо автору
 
   для: Eugene77   (08.04.2009 в 22:26)
 

потому что человек глупость сморозил.
А Вы до сих пор не привели пример запроса с таким странным поведением.

  Ответить  
 
 автор: Eugene77   (11.04.2009 в 18:30)   письмо автору
 
   для: Trianon   (08.04.2009 в 22:28)
 

>потому что человек глупость сморозил.
>А Вы до сих пор не привели пример запроса с таким странным поведением.

Подскажите как его поймать. Ошибка возникает относительно редко.

Кстати, использование кавычек, как было подсказано, действительно устранило проблему.

  Ответить  
 
 автор: Лерк   (11.04.2009 в 18:39)   письмо автору
 
   для: Eugene77   (11.04.2009 в 18:30)
 

Не может быть, чтобы после этого:
    if(!$r) return; 
    if($r == NULL) return; 
    if(mysql_num_rows($r)<1) return; 
    if(!is_resource($r))  return;

ошибка прошла дальше.

Быть может, В теле цикла
while($on_line=mysql_fetch_assoc($r)){ 

вы переопределяете $r при каком-то условии?

  Ответить  
 
 автор: Eugene77   (12.04.2009 в 16:54)   письмо автору
 
   для: Лерк   (11.04.2009 в 18:39)
 

С какой бы стати тогда при добавлении кавычек ошибка ушла?

Но с другой стороны, сейчас посмотрел внимательней, такое переопределение в принципе может случиться, при какой-то накладке типа недозагрузки страницы или ещё чего-то в этом роде.

Попробую сейчас сочинить более надёжный алгоритм для этого отрезка кода.

Спасибо!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования