Comment utiliser inet_aton et inet_ntoa pour traiter les données d'adresse IP via MySQL

jacklove
Libérer: 2023-03-31 07:22:01
original
1397 Les gens l'ont consulté

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.

1. Enregistrez l'adresse IP dans la base de données

Enregistrez l'adresse IP dans la base de données. Les champs sont généralement définis comme :

`ip` char(15) NOT NULL,
Copier après la connexion

É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;
Copier après la connexion

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');
Copier après la connexion

2 Méthodes .mysql inet_aton et inet_ntoa

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;
Copier après la connexion

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'));
Copier après la connexion
mysql> select * from `user`;
+----+-----------+------------+| id | name      | ip         |
+----+-----------+------------+|  2 | Abby      | 3232235777 |
|  3 | Daisy     | 2886732610 ||  4 | Christine | 3698688780 |
+----+-----------+------------+
Copier après la connexion

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 |
+----+-----------+----------------+
Copier après la connexion

Méthode de comparaison

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 = &#39;172.16.11.1&#39;;$ip_end = &#39;172.16.11.100&#39;;echo &#39;ip2long(ip_start):&#39;.sprintf(&#39;%u&#39;,ip2long($ip_start)); // 2886732545echo &#39;ip2long(ip_end):&#39;.sprintf(&#39;%u&#39;,ip2long($ip_end));     // 2886732644?>
Copier après la connexion

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  |
+------------+-------+---------------+
Copier après la connexion

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"

4. Résumé

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.

Cet article explique comment utiliser inet_aton et inet_ntoa pour traiter les données d'adresse IP via MySQL. Pour plus de contenu connexe, veuillez faire attention au site Web chinois php.

Recommandations associées :

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!