将IP存储为unsigned int?

Ian*_*Ian 3 php sql ip optimization

我读到在数据库中存储IP地址的最佳方法是创建一个Unsigned Int(10)字段.如何使用PHP转换IP地址?我试过用了

$this->ip = long2ip($_SERVER['REMOTE_ADDR']);
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用.我找到了使用它将其转换回IP地址的方法

$this->ip = sprintf("%u", ip2long($result['ip']));
Run Code Online (Sandbox Code Playgroud)

我最初如何转换IP地址?我应该使用PHP吗?或者更好地集成到MySQL查询中?

Gum*_*mbo 12

long2ip将整数转换为IP格式并ip2long执行反转.

因此,使用ip2long转换$_SERVER['REMOTE_ADDR']为整数以将其存储在数据库中,并long2ip在从数据库中读取整数后使用:

$long = ip2long($_SERVER['REMOTE_ADDR']);
$ip   = long2ip($long);
Run Code Online (Sandbox Code Playgroud)


Sil*_*ght 12

最好把这个逻辑放在你的SQL查询中:

INSERT INTO `table`
    (`ip`)
VALUES
    INET_ATON('192.168.0.1')
Run Code Online (Sandbox Code Playgroud)

然后在选择数据时隐藏地址:

SELECT INET_NTOA(`ip`)
    FROM `table`
Run Code Online (Sandbox Code Playgroud)

  • +1,特别是因为它也应该支持IPv6 - 虽然这可能永远不会成为现实:/ (2认同)