首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MySQL数据库表中存储ip地址时出现问题

问在MySQL数据库表中存储ip地址时出现问题
EN

Stack Overflow用户
提问于 2011-08-30 05:19:32
回答 1查看 116关注 0票数 0

使用这段代码获取用户的ip地址。我在我的数据库表中有ip的无符号整型字段

代码语言:javascript
复制
   <?php
    if (!empty($_SERVER['HTTP_CLIENT_IP'])){
      $ip=$_SERVER['HTTP_CLIENT_IP'];
    //proxy check
    }elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
      $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
    }else{
      $ip=$_SERVER['REMOTE_ADDR'];
    }
    $ip = ip2long($ip);
    ?>

在本地服务器上测试网站。问题是,在ip2long转换后获取'63177408abbad957ed13ae1a2dd3e0b3ed47bd0b48ffcb362‘。已尝试

代码语言:javascript
复制
    $ip=$_SERVER['REMOTE_ADDR'];
    $ip = ip2long($ip);

也是。还是没有成功。我怎么才能修复它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-30 05:23:23

您最有可能使用的是32位安装的PHP,这会损坏IP地址。尝试在mysql中进行转换,它不会遇到这个问题:

代码语言:javascript
复制
$ip = mysql_real_escape_string('127.0.0.1');
$sql = "INSERT INTO yourtable (ip) VALUES (INET_ATON('$ip'));";

另一种方法是强制PHP将其视为无符号整数,如ip2long man page:$ip = sprintf('%u', ip2long($ip));中的注释所示。

此外,请记住,IPv6将在“任何时候”广泛使用,并且您需要使用128位整数来存储这些值( MySQL不支持-它至少必须是两个64位大整数)。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7236108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档