我有一个名为Blocks
的表,如下所示:
| startIpNum | endIPNum | locId |
| int(11) | int(11) | int(11) |
现在很简单。正如您所猜测的那样,这是一个IP范围列表。我用它来进行地理定位。现在我得到$_SERVER['REMOTE_ADDR']
并将其转换为整数,并且我试图找到使用此查询之间的值范围
"SELECT * FROM `Blocks` WHERE startIPNum >= '$ip_addr' AND endIPNum <= '$ip_addr' "
其中$ip_addr
是REMOTE_ADDR
的整数形式。现在的问题是查询在phpMyAdmin中的PHP和MySQL中返回一个空结果,即使我知道表中有一行IP号码位于我之间,因为我的IP号是1677352691
而且是一行表是
| startIpNum | endIPNum | locId |
1677351936 | 1677354111 | 12431
所以我的结论是我的查询形成错误。那么如何正确查询表格以获得我想要的结果呢?
答案 0 :(得分:2)
你的条件不正确,
SELECT * FROM `Blocks`
WHERE startIPNum <= $ip_addr
AND endIPNum >= $ip_addr
答案 1 :(得分:1)
尝试不带引号,因为它们属于int
类型,然后告诉我这个案例 -
编辑 -
引用无关紧要,curtsey peterm
SELECT *
FROM `Blocks`
WHERE startIPNum <= $ip_addr AND endIPNum >= $ip_addr "
您也可以使用BETWEEN
,就像这样,
您在两个匹配案例中设置$ip_addr
还有一件事
SELECT *
FROM `Blocks`
WHERE $ip_addr BETWEEN startIPNum AND endIPNum "