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。その場合はお知らせください-

編集-

この場合、引用符は重要ではありません、curtsey peterm

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

BETWEEN次のようにを使用することもできます。

$ip_addr両方の一致するケースで設定しているもう1つのこと

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