gpt4 book ai didi

php - 从使用 inet_pton() 存储的 MySQL 中获取值

转载 作者:行者123 更新时间:2023-11-29 06:36:37 32 4
gpt4 key购买 nike

IP 地址使用 PHP 脚本中的 inet_pton() 进行存储。它们存储在数据库的 varbinary(16) 字段中。然而,我现在需要查询并返回仅使用 MySQL 存储的 IP 地址,但这似乎有点任务!

我试过使用 MySQL 的 INET_NTOA() 但由于某种原因它只返回 0.0.0.0。有人有什么想法吗?

最佳答案

我自己刚遇到这个问题。正如评论所建议的那样,如果您使用的是 MySQL 5.6.3+,则正确的解决方案是使用 INET6_NTOA。它处理 IPv4 和 IPv6 地址,但 IPv4 的格式与 INET_ATON(仅处理 IPv4)生成的格式不同。后者使用与 PHP 函数 ip2long 相同的格式。这是等效函数的引用表:

PHP        | MySQL
-----------|-------------
ip2long | INET_ATON
long2ip | INET_NTOA
inet_pton | INET6_ATON
inet_ntop | INET6_NTOA

综上所述,使用 INET_* 函数似乎可以转换 INET6_* 地址。作为noted in this question您可以使用以下方法将 IP 字符串转换为二进制格式:

UNHEX(HEX(CAST(INET_ATON(ipaddress) AS UNSIGNED)))
-- same as
INET6_ATON(ipaddress)

通过一些测试,我想出了如何做相反的事情:

INET_NTOA(CONV(HEX(ipaddress), 16, 10))
-- same as
INET6_NTOA(ipaddress)

希望这对某人有用。

关于php - 从使用 inet_pton() 存储的 MySQL 中获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24266272/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com