0

我有一个名为的表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

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

4

2 回答 2

2

你给出的条件不正确,

SELECT * FROM `Blocks`
WHERE startIPNum <= $ip_addr
AND endIPNum >= $ip_addr
于 2013-06-11T05:36:30.307 回答
1

试试这个不带引号,因为它们是int类型,然后让我知道情况 -

编辑-

在这种情况下,行情无关紧要,柯特西彼得姆

SELECT * 
FROM `Blocks` 
WHERE startIPNum <= $ip_addr AND endIPNum >= $ip_addr "

你也可以BETWEEN像这样使用

$ip_addr你在两个匹配的情况下设置的另一件事

SELECT * 
FROM `Blocks` 
WHERE $ip_addr BETWEEN startIPNum AND endIPNum "
于 2013-06-11T05:31:52.897 回答