正确执行此命令的方法

时间:2013-06-11 05:28:30

标签: php mysql

我有一个名为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_addrREMOTE_ADDR的整数形式。现在的问题是查询在phpMyAdmin中的PHP和MySQL中返回一个空结果,即使我知道表中有一行IP号码位于我之间,因为我的IP号是1677352691而且是一行表是

| startIpNum | endIPNum    | locId   | 
 1677351936  |  1677354111 | 12431

所以我的结论是我的查询形成错误。那么如何正确查询表格以获得我想要的结果呢?

2 个答案:

答案 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 "