Сервер: Хранение IP-адресов в MySQL и обработка в php
Для хранения IP-адресов в MySQL наиболее подходящим типом данных является тип VARBINARY(16), который представляет IP-адрес как 16-байтовое двоичное значение. VARBINARY - это тип данных в MySQL, который используется для хранения двоичных данных переменной длины.
Поиск IP-адреса по точному значению:
# функция INET6_NTOA() преобразует значение столбца ip из двоичного формата в текстовый формат SELECT * FROM `table` WHERE INET6_NTOA( `ip` ) = '192.168.1.1' # обратный подход, когда мы преобразуем ip адрес функцией INET6_ATON # и сравниваем с сохранённым значением SELECT * FROM `tabke` WHERE `ip` = INET6_ATON( '192.168.1.1' )
Поиск IP-адресов, начинающихся с заданного префикса:
SELECT * FROM `table` WHERE INET6_NTOA( `ip` ) LIKE '192.168.1.%'
Независимо от выбранного типа данных, вам также может потребоваться преобразовать IP-адрес в двоичное значение перед сохранением его в базу данных, а затем преобразовать обратно в строковый формат при извлечении данных из базы данных. Для этого в PHP существуют специальные функции, такие как inet_pton() и inet_ntop().
# Пример использования inet_pton() для преобразования IP-адреса в двоичное представление $ip = '192.168.0.1'; $binIp = inet_pton( $ip ); echo bin2hex( $binIp ); // > c0a80001 # Пример использования inet_ntop() для преобразования двоичного представления IP-адреса в строку $binIp = hex2bin( 'c0a80001' ); $ip = inet_ntop( $binIp ); echo $ip; // > 192.168.0.1
Комментарии