如何比较mysql数据库中的IP地址?
Posted
技术标签:
【中文标题】如何比较mysql数据库中的IP地址?【英文标题】:How do I compare IP addresses in a mysql database? 【发布时间】:2014-04-29 15:01:13 【问题描述】:我将 IP 地址存储在 mysql 数据库中,并且我想执行查询以检查特定 IP 地址是否已存在于数据库中。我读过建议将 IP 地址作为 INT 存储在 mysql 数据库中。所以这就是我正在做的事情:
$ip = '209.173.53.167'; // some random IP address
$ip_long = ip2long($ip); // convert IP address to integer
$sql = "SELECT *
FROM ip_addresses
WHERE ip='$ip_long'";
我在存储 IP 地址时执行了类似的操作,确保它们存储为 INT。但问题是我在WHERE
子句中的比较似乎不起作用。出于某种原因,WHERE ip='$ip_long'
不起作用。我已经执行了肯定可以工作的测试,但比较总是失败。我做错了什么?
【问题讨论】:
当您打印/转储查询并在命令/phpmyadmin 中运行它时,它是否按预期返回?您确定名称正确并且您的 SQL 连接/执行没有任何问题(您尚未发布) 小心...你应该在这里使用准备好的/参数化的查询。切勿将数据直接连接到查询中,即使现在对您来说似乎是安全的。您可能不知道您的代码将来会在什么上下文中使用。 【参考方案1】:IPv4 地址在存储为 32 位整数时,需要存储为无符号整数。 MySql 可能已经默默地将一个太大的有符号整数转换为它的二进制补码负数。
您可能需要检查您的表并仔细检查您的查询。
【讨论】:
以上是关于如何比较mysql数据库中的IP地址?的主要内容,如果未能解决你的问题,请参考以下文章