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
Форумы портала PHP.SU :: Версия для печати :: Как узнать существует ли запись?
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Как узнать существует ли запись?

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

1. LifePlay - 06 Января, 2011 - 06:02:38 - перейти к сообщению
Суть задачи:
Есть таблица 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\......
Растерялся

Помогите
2. Craken - 06 Января, 2011 - 07:15:11 - перейти к сообщению
В этом случае мускуль вернет "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.  
3. Мелкий - 06 Января, 2011 - 10:40:27 - перейти к сообщению
Craken пишет:
В этом случае мускуль вернет "Empty query", и массив нечем заполнить!

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

LifePlay, что mysql_error() пишет?
http://forum.php.su/topic.php?fo...8&topic=1140
4. LifePlay - 07 Января, 2011 - 09:10:14 - перейти к сообщению
Я ошибся
Нада было так
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 баненый';
5. Мелкий - 07 Января, 2011 - 11:17:26 - перейти к сообщению
LifePlay, можно и так, а можно - и как в первом посте сделано. Только там синтаксическая ошибка запроса имеется, поэтому дальнейшая логика падает.
6. LifePlay - 07 Января, 2011 - 12:33:49 - перейти к сообщению
Кокто так оптимизировал окончательно
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."'");

Не выходит
7. Мелкий - 07 Января, 2011 - 13:12:30 - перейти к сообщению
CODE (SQL):
скопировать код в буфер обмена
  1. UPDATE cat_banavtorip SET failure=failure+1 WHERE ...
8. Craken - 07 Января, 2011 - 17:21:18 - перейти к сообщению
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.  
9. JustUserR - 07 Января, 2011 - 21:17:19 - перейти к сообщению
LifePlay пишет:
Как мне узнать существует ли запись в этой таблице с ip = 123
Для определения сущесвования некоторой целевой записи информационных полей в таблице БД достаточно использование SQL-запроса производящего ее однозначное извлечение по ключевым параметрам - в таком случае определение списка полей может быть реализовано функцией mysql_num_rows

 

Powered by ExBB FM 1.0 RC1