如何通过mysql利用inet_aton和inet_ntoa来处理ip地址数据
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何通过mysql利用inet_aton和inet_ntoa来处理ip地址数据,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3022字,纯文字阅读大概需要5分钟。
内容图文
![如何通过mysql利用inet_aton和inet_ntoa来处理ip地址数据](/upload/InfoBanner/zyjiaocheng/135/daa08a02a4b24846a155cee59f5c190c.jpg)
1.保存ip地址到数据库
数据库中保存ip地址,字段一般会定义为:
`ip` char(15) NOT NULL,
因为ip地址(255.255.255.255)的最大长度是15,使用15位char已足够。
创建表user
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地址
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 | +----+-----------+----------------+
3.比较方法
如果需要找出在某个网段的用户(例如:172.16.11.1 ~ 172.16.11.100),可以利用php的ip2long方法,把ip地址转为整型,再进行比较。
<?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?>
查询:
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地址转为整型时,对于大的ip会出现负数,出现原因及处理方法可以参考我另一篇文章:《php ip2long 出现负数原因及解决方法》
4.总结
1.保存ip地址到数据库,使用unsigned int格式,插入时使用inet_aton方法把ip先转为无符号整型,可以节省存储空间。
2.显示时使用inet_ntoa把整型ip地址转为电地址。
3.php ip2long转ip为整型时,需要注意出现负数。
本文讲解了如何通过mysql 利用inet_aton和inet_ntoa来处理ip地址数据 ,更多相关内容请关注Gxl网。
相关推荐:
php json数据使用gzip压缩输出的相关内容
如何通过php来使用http_build_query,parse_url,parse_str创建与解析url
如何通过html5实现摇一摇的功能
以上就是如何通过mysql 利用inet_aton和inet_ntoa来处理ip地址数据的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是互联网集市为您收集整理的如何通过mysql利用inet_aton和inet_ntoa来处理ip地址数据全部内容,希望文章能够帮你解决如何通过mysql利用inet_aton和inet_ntoa来处理ip地址数据所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。