您好,欢迎访问一九零五行业门户网

如何通过mysql 利用inet_aton和inet_ntoa来处理ip地址数据

本文将介绍如何在数据库中使用合适格式保存ip地址数据,并能方便的对ip地址进行比较的方法。
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地址数据 ,更多相关内容请关注。
相关推荐:
php json数据使用gzip压缩输出的相关内容
如何通过php来使用http_build_query,parse_url,parse_str创建与解析url
如何通过html5实现摇一摇的功能
以上就是如何通过mysql 利用inet_aton和inet_ntoa来处理ip地址数据的详细内容。
其它类似信息

推荐信息