存储到mysql时,我的ip会被转换

时间:2012-12-11 19:09:05

标签: php mysql database ip

我正在编写一个脚本来获取访问者IP,通过爆炸删除它的点,在数据库中存储没有点的IP,然后获取它并回应它。 但是,当我将它存储到数据库中时,我的IP变得非常混乱。

HERE IS THE CODE!

示例:我的IP是178.175.35.205,没有点:17817535205,但是当通过MYSQL时,我甚至可以在PhpMyAdmin上看到它,转换为2147483647

更新:事实证明一切都很好,但我使用INT除了BIGINT。修好了。 我现在正在使用ip2long和long2ip。

3 个答案:

答案 0 :(得分:6)

强烈建议:

1)将IP存储为字符串

优点:

2)你可以留在“。”

......和......

3)您可以容纳IPv4和/或IPv6地址

IMHO ..

答案 1 :(得分:4)

不要重新发明轮子

使用http://php.net/manual/en/function.ip2long.phphttp://php.net/manual/en/function.long2ip.php 用于转换的功能。

它也会为你验证它

$ipToStore =  ip2long($ip);
if (false !== $ipToStore) {
    // Store your ip
}

// Read DB
echo long2ip($ipFromDB);

确保在db中使用BIGINT来存储它。

http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html#integer-types

答案 2 :(得分:0)

这里的问题是您使用的整数表示大于MySQL中INT列中存储的整数表示。在PHP中,您可以使用ip2long函数将IP地址转换为正确的32位整数。