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

Форум MySQL

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

 

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

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

тема: Хранение ip адресов в БД MySql
 
 автор: serjinio   (09.01.2009 в 15:06)   письмо автору
 
 

В каком виде и какой тип поля использовать ...наиболее оптимальный вариант???

  Ответить  
 
 автор: Саня   (09.01.2009 в 15:30)   письмо автору
 
   для: serjinio   (09.01.2009 в 15:06)
 

В поле типа unsigned int. Функция преобразования inet_aton(). Обратное преобразование inet_ntoa().

  Ответить  
 
 автор: serjinio   (09.01.2009 в 17:04)   письмо автору
 
   для: Саня   (09.01.2009 в 15:30)
 

Спасибо запустил все ок...
Для общего развития....
Оптимально хранить ip-адреса не как строки (varchar), а как числа. Для этого существует две функции mySQL — INET_ATON и INET_NTOA, первая преобразует 4 байтную последовательность ip-адреса в число, вторая преобразует обратно.
1. Столбец, в котором будут хранится ip-адреса объявляется как `ip` INT UNSIGNED NOT NULL
2. При вставке:
INSERT INTO `ip_s`
SET ip = INET_ATON('213.169.23.35')

3. При выборке (например > 255.255.0.0)
SELECT INET_NTOA(ip) 
FROM `ip_s`
WHERE `ip_s`.ip > INET_ATON('255.255.0.0')

По полю ip делаем индекс....

  Ответить  
 
 автор: pojar   (17.01.2009 в 12:00)   письмо автору
 
   для: serjinio   (09.01.2009 в 17:04)
 

А сколько же знаков для столбца IP указывать INT(??) UNSIGNED NOT NULL ?

  Ответить  
 
 автор: serjinio   (18.01.2009 в 03:20)   письмо автору
 
   для: pojar   (17.01.2009 в 12:00)
 

Смотря что хранить .....
` ip`int(10) unsigned NOT NULL default '0',
или bigint(10)

  Ответить  
 
 автор: Саня   (18.01.2009 в 11:35)   письмо автору
 
   для: pojar   (17.01.2009 в 12:00)
 

Просто напишите `ip` INT UNSIGNED и всё.

  Ответить  
 
 автор: mihdan   (17.01.2009 в 14:20)   письмо автору
 
   для: serjinio   (09.01.2009 в 17:04)
 

К сожалению функции inet_ntop(), inet_pton() доступны только в РНР5

  Ответить  
 
 автор: Loki   (17.01.2009 в 23:15)   письмо автору
 
   для: mihdan   (17.01.2009 в 14:20)
 

Бред. Эти функции вообще в php недоступны.

  Ответить  
 
 автор: mihdan   (18.01.2009 в 23:45)   письмо автору
 
   для: Loki   (17.01.2009 в 23:15)
 

Спутал с inet_ntop(), inet_pton() которые есть в РНР и доступны с пятой версии.

  Ответить  
 
 автор: BinLaden   (19.01.2009 в 15:34)   письмо автору
 
   для: mihdan   (18.01.2009 в 23:45)
 

Странно, когда Вам отвечал Loki, то в Вашем сообщении никаких inet_ntop(), inet_pton() не было.

  Ответить  
 
 автор: Саня   (20.01.2009 в 10:20)   письмо автору
 
   для: BinLaden   (19.01.2009 в 15:34)
 

На форуме есть скрытая функция редактирование постов, на которые уже ответили. Об этой функции знают только старички =)

  Ответить  
 
 автор: BinLaden   (20.01.2009 в 10:53)   письмо автору
 
   для: Саня   (20.01.2009 в 10:20)
 

На самом деле я это прекрасно знаю. Я лишь хотел выразить недоумение тем, что mihdan правит посты после ответа на них. Причём так, что отвечающий оказывается в неловкой ситуации: якобы плохо смотрел.

  Ответить  
 
 автор: Trianon   (20.01.2009 в 11:36)   письмо автору
 
   для: BinLaden   (20.01.2009 в 10:53)
 

Поэтому, когда комментируешь чей-то пост, и нет уверенности в "моральном уровне" автора поста, нелишним будет горячую строку процитировать. А если такая уверенность есть - процитировать с указанием даты-времени написания. :)

  Ответить  
 
 автор: BinLaden   (20.01.2009 в 12:51)   письмо автору
 
   для: Trianon   (20.01.2009 в 11:36)
 

Да, знаю такой хитрый прием.

  Ответить  
 
 автор: Саня   (20.01.2009 в 10:19)   письмо автору
 
   для: mihdan   (18.01.2009 в 23:45)
 

В PHP всегда были функции ip2long() и long2ip(). Отличаются от inet_ntop(), inet_pton() тем, что преобразуют только IPv4.

  Ответить  
 
 автор: serjinio   (18.01.2009 в 03:17)   письмо автору
 
   для: mihdan   (17.01.2009 в 14:20)
 

Вообще-то это MySql

  Ответить  
 
 автор: HaJIuBauKa   (19.01.2009 в 13:56)   письмо автору
 
   для: serjinio   (09.01.2009 в 17:04)
 

Вопрос:

Как обновить текущую таблицу поле IP (типа INT), если там было поле IP типа VARCHAR.
Скриптом знаю можно, но если без скрипта можно или нет средствами MySQL?

  Ответить  
 
 автор: Axxil   (19.01.2009 в 14:12)   письмо автору
 
   для: HaJIuBauKa   (19.01.2009 в 13:56)
 

Очевидно создать новое поле типа INT и преобразовать туда строковые значения

UPDATE ip_table SET int_field = INET_ATON(ip)


а потом снести поле ip и переименовать int_field в ip

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

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