php mysql配合什么,PHP与MYSQL配合完成IP的存取

如何存储IP

程序设计要在功能实现的基础上最大限度的优化性能。而数据库设计是程序设计中不可忽略的重要部分,巧存IP地址可以一定程度提升性能。

利用函数算法处理

MySQL没有直接提供IP类型字段,但有两个函数可以把IP与最大长度为10位数字类型互转,所以使用int类型存储IP比varchar类型存储IP地址性能要提升很多,更节省存储空间。varchar是可变长类型,需要多余的一个字节长度。另外int型在逻辑运算上要比varchar速度快。

IP转数字函数inet_aton()

我们转换下几个常用的IP地址

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

mysql>select inet_aton('255.255.255.255');

+------------------------------+

| inet_aton('255.255.255.255') |

+------------------------------+

|                   4294967295 |

+------------------------------+

1 rowin set (0.00 sec)

mysql>select inet_aton('192.168.1.1');

+--------------------------+

| inet_aton('192.168.1.1') |

+--------------------------+

|               3232235777 |

+--------------------------+

1 rowin set (0.00 sec)

mysql>select inet_aton('10.10.10.10');

+--------------------------+

| inet_aton('10.10.10.10') |

+--------------------------+

|                168430090 |

+--------------------------+

1 rowin set (0.00 sec)

所以IP的表字段可以设置为INT(10)就好,如果IP获取不到可以直接存0代表获取不到IP的意思

数字转IP函数inet_ntoa()

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

mysql>select inet_ntoa(4294967295);

+-----------------------+

| inet_ntoa(4294967295) |

+-----------------------+

| 255.255.255.255       |

+-----------------------+

1 rowin set (0.00 sec)

mysql>select inet_ntoa(3232235777);

+-----------------------+

| inet_ntoa(3232235777) |

+-----------------------+

| 192.168.1.1           |

+-----------------------+

1 rowin set (0.00 sec)

mysql>select inet_ntoa(168430090);

+----------------------+

| inet_ntoa(168430090) |

+----------------------+

| 10.10.10.10          |

+----------------------+

1 rowin set (0.00 sec)

mysql>select inet_ntoa(0);

+--------------+

| inet_ntoa(0) |

+--------------+

| 0.0.0.0      |

+--------------+

1 rowin set (0.00 sec)

注意,0转换为 0.0.0.0

*******************华丽分割***********************

以上为原文内容,实际使用中,换了一台IP地址较大的机器登陆后,发现数据库中竟存入了一个负值...

环境PHP+MYSQL+32位WIN7

于是查找原因...此处省略3000字

结果如下:

原因:PHP自带的ip2logng('192.168.1.17'),转换IP地址后,其值超出了32位系统INT的取值范围,导致溢出,结果为负

解决方案:将MYSQL存储IP的字段设置为bigint类型,否则会溢出

存储IP之前,将ip2long转换过的值处理为2进制,再处理回10进制,示例:bindec(decbin(ip2long('192.168.1.17')));  //3232235793

至此问题解决,后遗症暂未发现,发现再纠正...

from:http://www.qttc.net/201208193.html 修正:Faddei

在Jena框架下基于MySQL数据库实现本体的存取操作

在Jena框架下基于MySQL数据库实现本体的存取操作 转自:http://blog.csdn.net/jtz_mpp/article/details/6224311 最近在做一个基于本体的管理系统. ...

连接mysql数据库时提示2003 can't connect to MySQL server on ip(10060)的解决办法

今天部署 JavaWeb 项目到云服务器,突然出现can t connect to MySQL server on ip的问题 经过了一些检查,认为很有可能是防火墙的原因.下面是检查的具体操作: 因为 ...

MySQL怎样存储IP地址 IP转数字 互转

MySQL怎样存储IP地址 - cn三少 - 博客园 https://www.cnblogs.com/cnsanshao/p/3326648.html

mysql设置指定ip远程访问连接的方法

本文实例讲述了mysql设置指定ip远程访问连接的方法,分享给大家供大家参考.具体实现方法如下: 1. 授权用户root使用密码jb51从任意主机连接到mysql服务器: 复制代码 代码如下: GRA ...

mysql 监听ip地址修改

如何修改MySQL监听IP地址 Mysql默认在本地环路地址127.0.0.1的3306端口监听,要使用其它IP地址需要修改配置文件. 1.编辑/etc/my.cnf 在[mysqld]节中增加下面一 ...

MYSQL数据库无法使用IP地址访问的解决办法

1.在运行中输入CMD,确定,进入文本方式. 2.输入mysql -h localhost -u root -p 回车,使用ROOT用户登录. 3.输入use mysql; 显示Database ch ...

随机推荐

获取网页文档的URL和连接来源

maker 2008年发表在genome Res

http://gmod.org/wiki/MAKER_Tutorial 简单好用 identify repeats, to align ESTs and proteins to the genome, ...

windows程序设计读书笔记1——创建窗口

第一个win32程序,简单的创建窗口: #include LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ...

关于对HandlerThread的了解

在Android中经常需要创建一个循环线程,有耗时操作时候,放到里面去操作,如果没有耗时操作,就让该线程处于等待,但是不要杀死它, 最好不要一旦有耗时任务,就立刻创建一个新线程,因为会有性能问题. H ...

Oracle入门《Oracle介绍》第一章1-3 Oracle 逻辑组件

一.数据库的逻辑结构是从逻辑的角度分析数据库的组成.Oracle 的逻辑组件包括: 1.表空间 表空间是数据库中最大的逻辑单位,一个 Oracle 数据库至少包含一个表空间,就是名为SYSTEM的系统 ...

codeforces 502 g The Tree

题解: 一道优秀的题目 有几种做法: 1.维护后缀和 刚开始我想的是维护前缀和 然后用$sum[x]-sum[y]>=dep[x]-dep[y]$来做 但是这样子树赋值为0这个操作就很难进行了 ...

接口测试工具-Jmeter使用笔记(七:用户定义的变量)

使用场景:一组API根据业务流程制作成测试脚本,想要移植到其他测试环境时,由于数据库发生了变更,有些初始化数据也相应发生了变化,例如环境地址.请求路径等等.博主甚至把服务器地址和接口的部分共同请求路径 ...

Eloquent JavaScript #03# functions

索引: let VS. var 定义函数的几种方式 more... 1.作者反复用的side effect side effect就是对世界造成的改变,例如说打印某些东西到屏幕,或者以某种方式改变机器 ...

hdu-1171(多重背包+二进制优化)

题目链接: 思路:找每次最多装一半的情况,注意数组范围,前几次dp开小了,一直RE. #include #include #include& ...

Ironic , Openstack Baremetal Hypervisor

Ironic , Openstack Baremetal Hypervisor,首发于UnitedStack Inc.. 转自: http://ju.outofmemory.cn/entry/4876 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值