我将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}'
不起作用。我已经完成了绝对有效的测试,但比较总是失败。我做错了什么?
答案 0 :(得分:0)
IPv4地址作为32位整数存储时,需要存储为无符号整数。可能的MySql已经将一个太大的有符号整数静默转换为二进制补码负数。
您可能需要检查您的表格并仔细检查您的查询。