Вопрос по mysql, php, ip – Хранение IP-адреса в базе данных MySQL (IPv4 И IPv6)

6

Хорошо, теперь я знаю, что подобные вопросы, вероятно, задавались миллион раз, но я настоящий новичок в этом, и я действительно ценю вашу помощь здесь.

По сути, я хочу сохранить IP-адрес посетителей в MySQL для последующего поиска и проверки. Во-первых, мне нужно знать, какой тип поля мне нужно использовать для хранения IP-адреса. Я также хотел бы сделать систему совместимой с адресами IPv6, если это возможно.

заранее спасибо

Каковы ваши основные варианты использования для адресов? Собираетесь ли вы запросить их? Разделить их и запросить в соответствии с некоторыми правилами подсетей? Или они хранятся только для отображения? Emil Vikström
Попробуй это:stackoverflow.com/questions/2049681/store-ipv6-in-database Mark
Хорошо это для ссылки подтверждения. Я хочу убедиться, что ссылка для подтверждения была посещена с того же IP-адреса, на котором она была создана. Поэтому я собираюсь запросить их] Andy

Ваш Ответ

4   ответа
5

INET_ATON() вставить номер IP (который я позже прочитал, используя обратную функцию,INET_NTOA().

Вы должны использовать INET6_NTOA и INTE6_ATON, но это не доступно в MySQL до версии 5.6.3
Итак, будет ли VARBINARY (16) поддерживать IPv4 и IPv6? И как мне найти посетителей & apos; IP-адрес с помощью PHP? Andy
1

достаточно большого для хранения IPv6-адреса. Самый компактный способ его хранения - это что-то вродеBINARY(16), Если вам просто нужно хранить и извлекать адреса, и вам не нужно выполнять над ними логические операции (например, операции сетевой маски для запроса, для каких IP-адресов указан префикс покрытия), этого будет достаточно. Если вам нужно выполнять логические или битовые операции, вам нужно быть более изощренным: вам нужно хранить адреса IPv6 в двух отдельных 64-битных целочисленных столбцах.

Нет, мне не нужно делать что-то более причудливое (просто получить / сравнить их в запросе). Поэтому все, что мне нужно знать сейчас, - это как получить IP-адрес пользователя с помощью PHP? Andy
11

INT UNSIGNEDв то время как для IPv6 вам нуженdecimal(39,0), чтобы сохранить IP в таблице вы можете использовать функциюINET_ATON:

INSERT INTO table (ipcol) VALUES (INET_ATON('192.168.0.10'));

и получить его обратно с помощью функцииINET_NTOA:

SELECT INET_NTOA(ipcol) AS ip FROM table;

Это ответ существовал до поддержки MySQL IPv6;users should be made aware that MySQL now natively supports IPv6: https://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html

Спасибо, но я думал, что только что прочиталINET_ATON() не поддерживает IPv6. И даже если это произойдет, как я могу получить адрес IPv6 с помощью PHP? Andy
Справедливо, спасибо. Теперь, как мне найти IP-адрес пользователя в PHP? Andy
Посмотрите здесь:roshanbh.com.np/2007/12/getting-real-ip-address-in-php.html ;-)
Спасибо. Я собираю информацию, которая будет работать с IPv6, да? Andy
Попробуйте с inet_pton:php.net/manual/en/function.inet-pton.php
-1

int(10) неподписанный

http://lists.mysql.com/cluster/2781

Похожие вопросы