Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как узнать существует ли запись?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
LifePlay
Отправлено: 06 Января, 2011 - 06:02:38
Post Id



Частый гость


Покинул форум
Сообщений всего: 135
Дата рег-ции: Авг. 2010  
Откуда: Кобеляки, Украина


Помог: 0 раз(а)




Суть задачи:
Есть таблица id | ua | ip | time | failure
Как мне узнать существует ли запись в этой таблице с ip = 123 ? и если да то прочитать всё в массив

Пробую так

PHP:
скопировать код в буфер обмена
  1. $info = mysql_fetch_assoc(mysql_query('SELECT count(id) FROM `cat_banavtorip` WHERE `ip`='.$ip.' LIMIT = 1'));


Если записи нет то ошибка
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in S:\home\......
Растерялся

Помогите
 
 Top
Craken
Отправлено: 06 Января, 2011 - 07:15:11
Post Id


Новичок


Покинул форум
Сообщений всего: 20
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




В этом случае мускуль вернет "Empty query", и массив нечем заполнить!
Так что нужно делать проверку!
А почему бы не сделать так?

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $sql = mysql_query("SELECT * FROM cat_banavtorip WHERE ip = ".$ip." LIMIT 1");
  4.  
  5.  if (mysql_num_rows($sql) > 0)
  6.  {
  7.     $result = mysql_fetch_array($sql);
  8.  
  9.    // ну или как у Вас $result = mysql_fetch_assoc($sql);
  10.  
  11.  }
  12.  
  13. ?>
  14.  

(Отредактировано автором: 06 Января, 2011 - 07:25:20)

 
 Top
Мелкий Супермодератор
Отправлено: 06 Января, 2011 - 10:40:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Craken пишет:
В этом случае мускуль вернет "Empty query", и массив нечем заполнить!

ненене, на пустую строку mysql_fetch_* реагирует адекватно, возвращает false. Здесь просблема именно в mysql_query - она вернула false, вместо ресурса.
К тому же, count возвращает 1 строку всегда.

LifePlay, что mysql_error() пишет?
http://forum.php.su/topic.php?forum=28&topic=1140

(Отредактировано автором: 06 Января, 2011 - 10:42:17)



-----
PostgreSQL DBA
 
 Top
LifePlay
Отправлено: 07 Января, 2011 - 09:10:14
Post Id



Частый гость


Покинул форум
Сообщений всего: 135
Дата рег-ции: Авг. 2010  
Откуда: Кобеляки, Украина


Помог: 0 раз(а)




Я ошибся
Нада было так
PHP:
скопировать код в буфер обмена
  1. $info_bann = mysql_fetch_assoc(mysql_query('SELECT * FROM `cat_banavtorip` WHERE `ip`="'.$ip.'"'));


Я правильно понял? если в масив ничо не записало значит строка не найдена и мозна зделать проверку типа

PHP:
скопировать код в буфер обмена
  1. if($info_bann == false) echo 'ip не баненый';
  2. else echo 'ip баненый';

(Отредактировано автором: 07 Января, 2011 - 09:34:15)

 
 Top
Мелкий Супермодератор
Отправлено: 07 Января, 2011 - 11:17:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




LifePlay, можно и так, а можно - и как в первом посте сделано. Только там синтаксическая ошибка запроса имеется, поэтому дальнейшая логика падает.


-----
PostgreSQL DBA
 
 Top
LifePlay
Отправлено: 07 Января, 2011 - 12:33:49
Post Id



Частый гость


Покинул форум
Сообщений всего: 135
Дата рег-ции: Авг. 2010  
Откуда: Кобеляки, Украина


Помог: 0 раз(а)




Кокто так оптимизировал окончательно
PHP:
скопировать код в буфер обмена
  1. $query = mysql_query('SELECT * FROM `cat_banavtorip` WHERE `ip`="'.$ip_l.'"');
  2.  
  3. if($query == FALSE)
  4.         {
  5.         $banavtorip = 0;
  6.         }
  7. else
  8.         {
  9.         $info_bann = mysql_fetch_assoc($query);
  10.         $banavtorip = $info_bann['failure'];
  11.         }


Вопросик не в тему
Как увеличить значение ячейки на один
Пробую так
PHP:
скопировать код в буфер обмена
  1. $query = mysql_query("UPDATE cat_banavtorip SET failure= +1 WHERE ip='".$ip_l."'");

Не выходит
 
 Top
Мелкий Супермодератор
Отправлено: 07 Января, 2011 - 13:12:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. UPDATE cat_banavtorip SET failure=failure+1 WHERE ...


-----
PostgreSQL DBA
 
 Top
Craken
Отправлено: 07 Января, 2011 - 17:21:18
Post Id


Новичок


Покинул форум
Сообщений всего: 20
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




LifePlay
Цитата:
Как увеличить значение ячейки на один

красивее так:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. mysql_query("UPDATE cat_banavtorip SET failure=failure+1 WHERE ip='".$ip_l."'");
  3.  


Цитата:
PHP:
скопировать код в буфер обмена
  1.    1.
  2.       $query = mysql_query('SELECT * FROM `cat_banavtorip` WHERE `ip`="'.$ip_l.'"');
  3.    2.
  4.        
  5.    3.
  6.       if($query == FALSE)
  7.    4.
  8.               {
  9.    5.
  10.               $banavtorip = 0;
  11.    6.
  12.               }
  13.    7.
  14.       else
  15.    8.
  16.               {
  17.    9.
  18.               $info_bann = mysql_fetch_assoc($query);
  19.   10.
  20.               $banavtorip = $info_bann['failure'];
  21.   11.
  22.               }


тогда уже так:

PHP:
скопировать код в буфер обмена
  1.  
  2.    1.
  3.       $query = mysql_query('SELECT * FROM `cat_banavtorip` WHERE `ip`="'.$ip_l.'"');
  4.    2.
  5.        
  6.    3.
  7.       if(!mysql_num_rows($query))
  8.    4.
  9.               {
  10.    5.
  11.               $banavtorip = 0;
  12.    6.
  13.               }
  14.    7.
  15.       else
  16.    8.
  17.               {
  18.    9.
  19.               $info_bann = mysql_fetch_assoc($query);
  20.   10.
  21.               $banavtorip = $info_bann['failure'];
  22.   11.
  23.               }
  24.  
 
 Top
JustUserR
Отправлено: 07 Января, 2011 - 21:17:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




LifePlay пишет:
Как мне узнать существует ли запись в этой таблице с ip = 123
Для определения сущесвования некоторой целевой записи информационных полей в таблице БД достаточно использование SQL-запроса производящего ее однозначное извлечение по ключевым параметрам - в таком случае определение списка полей может быть реализовано функцией mysql_num_rows


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB