ホームページ  >  記事  >  バックエンド開発  >  inet_aton と inet_ntoa を使用して mysql を通じて IP アドレス データを処理する方法

inet_aton と inet_ntoa を使用して mysql を通じて IP アドレス データを処理する方法

jacklove
jackloveオリジナル
2018-06-09 10:14:131391ブラウズ

この記事では、適切な形式で IP アドレス データをデータベースに保存する方法と、IP アドレスを簡単に比較する方法を紹介します。

1. IP アドレスをデータベースに保存します。

IP アドレスをデータベースに保存します。フィールドは通常、次のように定義されます。 #

`ip` char(15) NOT NULL,

IP アドレス (255.255.255.255) の最大長は 15 であるため、15 ビットの文字を使用すれば十分です。

テーブル ユーザーの作成

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;

複数のデータを挿入

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');

2.mysql inet_atonと inet_ntoa メソッド

mysql は IP アドレスを処理する 2 つのメソッドを提供します

#inet_aton ip を符号なし整数型に変換します (4- 8 桁)
inet_ntoa 整数の IP を電気アドレスに変換します

データを挿入する前に、inet_aton## を使用します #IP アドレスを整数に変換しますchar(15) は 16 バイトを占有するため、スペースを節約します。 データを表示するときは、inet_ntoa
を使用して、整数の IP アドレスを表示用の電気アドレスに変換します。

#例:

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;

複数のデータを挿入します

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 |
+----+-----------+------------+

クエリはメール アドレス

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 |
+----+-----------+----------------+

として表示されます。比較方法

特定のネットワーク セグメント (例: 172.16.11.1 ~ 172.16.11.100) 内のユーザーを調べる必要がある場合は、PHP の

ip2long メソッドを使用して IP アドレスを整数に変換し、比較できます。

6f0ae2a3f34ecd991e57660263d12ee5

クエリ:

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  |
+------------+-------+---------------+

注: ip2long メソッドを使用して IP アドレスを整数に変換する場合、 forlarge ip に負の数が含まれる場合があります。その理由と解決策については、私の他の記事「php ip2long での負の数の原因と解決策」を参照してください。

1. IP アドレスを unsigned int 形式でデータベースに保存します。挿入するときは、最初に inet_aton メソッドを使用して IP アドレスを符号なし整数に変換します。これにより、ストレージ領域を節約できます。

2. inet_ntoa を使用して、表示時に整数の IP アドレスを電気アドレスに変換します。 3.php ip2long から ip を整数に変換するときは、負の数が出現することに注意する必要があります。

この記事では、inet_aton と inet_ntoa を使用して mysql を通じて IP アドレス データを処理する方法について説明します。関連コンテンツの詳細については、PHP 中国語 Web サイトを参照してください。
関連する推奨事項:

gzip 圧縮出力を使用した php json データ関連コンテンツ

php、parse_url で http_build_query を使用する方法、parse_str url を作成して解析します

html5
を介してシェイク関数を実装する方法

以上がinet_aton と inet_ntoa を使用して mysql を通じて IP アドレス データを処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。