【发布时间】:2013-07-02 02:25:30
【问题描述】:
把我的问题放在正确的角度:
我有一个 PHP 应用程序,它将用户的 IP 存储在 MySQL 表中。
列类型为VARBINARY(16),应用使用PHP的inet_pton形成二进制字符串。
这是一个典型 IP4 地址的字符串有 4 个字节。
如何从表格中检索这些 IP,并以人类可读的形式显示它们?
我目前的解决方案是:
select INET_NTOA(CONV(HEX(ip),16,10)) from operation_ip;
有没有更直接的方法?
尤其是CONV(HEX(x),16,10)将4个字节变成整数的最简单方法(实际上我认为它甚至不是整数,而是看起来像整数的字符串)。
(我使用 VARBINARY(16),因为 PHP 的 inet_pton 可以返回 16 字节的 IPv6 地址。AFAIK MySQL 的 INET_NTOA 不支持 IPv6,但目前这不是我最关心的问题)。
【问题讨论】:
-
如果你想要一个更直接的形式,不要将IP地址转换为二进制以便将其存储在数据库中......或者同时使用地址的字符串和数据库中的二进制值.
标签: php mysql ip-address