Php 将IP地址作为整数存储在数据库中

Php 将IP地址作为整数存储在数据库中,php,mysql,Php,Mysql,我在数据库中将ip地址存储为整数,列类型为unsigned int,但对于数据库中的某些ip,它保存为0,我测试了ip2long函数的某些ip返回负整数,当我在数据库中插入它时,它保存为0。我在谷歌上搜索,每个人都说该列必须是无符号int 例如:ip2long(“212.36.25.15”)将返回-735831793,并在数据库中保存为0您可以使用MySQL函数INET\u ATON来代替。使用INET\u ATON插入ip地址。 例如:INET_ATON('127.0.0.1'); 使用I

我在数据库中将ip地址存储为整数,列类型为unsigned int,但对于数据库中的某些ip,它保存为0,我测试了ip2long函数的某些ip返回负整数,当我在数据库中插入它时,它保存为0。我在谷歌上搜索,每个人都说该列必须是无符号int


例如:
ip2long(“212.36.25.15”)
将返回
-735831793
,并在数据库中保存为
0
您可以使用MySQL函数INET\u ATON来代替。

使用INET\u ATON插入ip地址。
例如:INET_ATON('127.0.0.1');
使用INET_NTOA获取ip地址

例如:选择INET_NTOA('2130706433')

您需要将数据库列的类型从“integer”更改为“unsigned int”。列为unsigned int,但对于某些IP,它另存为0。这可能对你有用为什么你要这样转换它们?
VARCHAR
列是一个更好的计划,因为它可以存储IPv4和IPv6地址。您的数值解决方案仅适用于IPv4,为以后的失败做好了准备。IPv4地址是一个无符号的32位值,但除非您要存储数十亿个地址,否则请使用字符串。Postgres有特殊的网络地址类型:自9.1以来的cidr和inet。它们很棒。是的,我用mysql函数进行了测试,它正在工作。是的,我用mysql函数进行了测试,它正在工作。