Cet article explique comment utiliser un format approprié pour enregistrer les données d'adresse IP dans la base de données et comparer facilement les adresses IP.
Enregistrez l'adresse IP dans la base de données. Les champs sont généralement définis comme :
`ip` char(15) NOT NULL,
Étant donné que la longueur maximale de l'adresse IP (255.255.255.255) est de 15, l'utilisation de caractères de 15 bits est suffisante.
Créer un utilisateur de table
CREATE TABLE `user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(30) NOT NULL, `ip` char(15) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB;
Insérer plusieurs données
INSERT INTO `user` (`id`, `name`, `ip`) VALUES(2, 'Abby', '192.168.1.1'), (3, 'Daisy', '172.16.11.66'), (4, 'Christine', '220.117.131.12');
mysql fournit deux méthodes pour gérer les adresses IP
inet_aton transfert ip C'est un type entier non signé (4-8 bits)
inet_ntoa Convertissez l'adresse IP entière en une adresse électrique
Avant d'insérer des données, utilisez inet_atonConvertissez l'adresse IP en un entier pour économiser de l'espace, car char(15) occupe 16 octets. Lors de l'affichage des données, utilisez
inet_ntoa pour convertir l'adresse IP entière en une adresse électrique à afficher.
Exemple :
CREATE TABLE `user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(100) NOT NULL, `ip` int(10) unsigned NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB;
Insérer plusieurs données
INSERT INTO `user` (`id`, `name`, `ip`) VALUES(2, 'Abby', inet_aton('192.168.1.1')), (3, 'Daisy', inet_aton('172.16.11.66')), (4, 'Christine', inet_aton('220.117.131.12'));
mysql> select * from `user`; +----+-----------+------------+| id | name | ip | +----+-----------+------------+| 2 | Abby | 3232235777 | | 3 | Daisy | 2886732610 || 4 | Christine | 3698688780 | +----+-----------+------------+
La requête affiche l'adresse e-mail
mysql> select id,name,inet_ntoa(ip) as ip from `user`; +----+-----------+----------------+| id | name | ip | +----+-----------+----------------+| 2 | Abby | 192.168.1.1 | | 3 | Daisy | 172.16.11.66 || 4 | Christine | 220.117.131.12 | +----+-----------+----------------+
Si vous avez besoin de connaître les utilisateurs dans un certain segment de réseau (par exemple : 172.16.11.1 ~ 172.16.11.100), vous pouvez utiliser la méthode ip2long de PHP pour convertir l'adresse IP. en un entier, puis effectuez une comparaison.
<?php$ip_start = '172.16.11.1';$ip_end = '172.16.11.100';echo 'ip2long(ip_start):'.sprintf('%u',ip2long($ip_start)); // 2886732545echo 'ip2long(ip_end):'.sprintf('%u',ip2long($ip_end)); // 2886732644?>
Requête :
mysql> select ip,name,inet_ntoa(ip) as ip from `user` where ip>=2886732545 and ip<=2886732644; +------------+-------+---------------+| ip | name | ip | +------------+-------+---------------+| 2886732610 | Daisy | 172.16.11.66 | +------------+-------+---------------+
Remarque : utilisez la méthode ip2long pour convertir l'adresse IP en un entier Quand, des nombres négatifs apparaîtront pour les grandes IP. Pour les raisons et les solutions, veuillez vous référer à mon autre article : "Causes et solutions des nombres négatifs dans php ip2long"
1. Enregistrez l'adresse IP dans la base de données au format int non signé lors de l'insertion, utilisez la méthode inet_aton pour convertir d'abord l'adresse IP en un entier non signé, ce qui peut économiser de l'espace de stockage. 2. Utilisez inet_ntoa pour convertir l'adresse IP entière en adresse électrique lors de l'affichage.
3. Lors de la conversion de ip2long en ip en type entier, vous devez faire attention à l'apparition de nombres négatifs.
Contenu associé sur l'utilisation de la sortie de compression gzip des données php json
Comment utiliser http_build_query via php , parse_url, parse_str crée et analyse l'url
Comment implémenter la fonction shake via html5
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!