Помогите с выборкой по айпи

K
На сайте с 13.11.2009
Offline
169
628

Опять у меня не фига не получается...Есть вот такая база с такими параметрами:

CREATE TABLE `ip2location_db11`(
`ip_from` INT(10) UNSIGNED,
`ip_to` INT(10) UNSIGNED,
`country_code` CHAR(2),
`country_name` VARCHAR(64),
`region_name` VARCHAR(128),
`city_name` VARCHAR(128),
`latitude` DOUBLE,
`longitude` DOUBLE,
`zip_code` VARCHAR(30),
`time_zone` VARCHAR(8),
INDEX `idx_ip_from` (`ip_from`),
INDEX `idx_ip_to` (`ip_to`),
INDEX `idx_ip_from_to` (`ip_from`, `ip_to`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

Импортировала туда вот такую базу данных:

"16799232","16799743","JP","Japan","Hiroshima","Hiroshima","34.385280","132.455280","730-0011","+09:00"
"16799744","16799999","JP","Japan","Tokyo","Tokyo","35.689506","139.691700","214-0021","+09:00"
"16800000","16800255","JP","Japan","Hiroshima","Hiroshima","34.385280","132.455280","730-0011","+09:00"

Пытаюсь сделать запрос к базе и найти данные по конкретному айпи адресу:

<?php

$rem_ip = $_SERVER['REMOTE_ADDR'];

$con = mysql_connect("localhost","tester8","tester8") or die(mysql_error());
mysql_select_db("geoli2015") or die(mysql_error());


{
$ip = ip2long($rem_ip);

$res = mysql_query("SELECT * from ip2location_db11 WHERE $ip >= ip_from AND $ip <= ip_to") or die(mysql_error());

$row = mysql_fetch_array($res);
echo "<h1>Country Name : ".$row['country_name']."</h1><br />";
echo "<h1>Country Code : ".$row['country_code']."</h1><br />";

$res1 = mysql_query("SELECT COUNT(*) AS Total FROM ip2location_db11 WHERE") or die(mysql_error());
$row1 = mysql_fetch_array($res1);
echo $row1['Total'];

}
?>

И получаю вот такую ошибку :

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'table 2 WHERE -1124213214 >= ip_from AND -1124213214 <= ip_to' at line 1

Где я напортачила ?

[umka]
На сайте с 25.05.2008
Offline
456
#1

Покажите весь SQL-запрос целиком.

Целиком, т.е. полностью.

В том виде, в каком посылаете его SQL-серверу.

Лог в помощь!
K
На сайте с 13.11.2009
Offline
169
#2
'[umka:
;13605511']Покажите весь SQL-запрос целиком.
Целиком, т.е. полностью.
В том виде, в каком посылаете его SQL-серверу.

всё как написала

выполняю скрипт вот этот

<?php

$rem_ip = $_SERVER['REMOTE_ADDR'];

$con = mysql_connect("localhost","tester8","tester8") or die(mysql_error());
mysql_select_db("geoli2015") or die(mysql_error());


{
$ip = ip2long($rem_ip);

$res = mysql_query("SELECT * from ip2location_db11 WHERE $ip >= ip_from AND $ip <= ip_to") or die(mysql_error());

$row = mysql_fetch_array($res);
echo "<h1>Country Name : ".$row['country_name']."</h1><br />";
echo "<h1>Country Code : ".$row['country_code']."</h1><br />";

$res1 = mysql_query("SELECT COUNT(*) AS Total FROM ip2location_db11 WHERE") or die(mysql_error());
$row1 = mysql_fetch_array($res1);
echo $row1['Total'];

}
?>

но получаю теперь только:

Country Name :

Country Code :

[umka]
На сайте с 25.05.2008
Offline
456
#3

То есть, синтаксическую ошибку самостоятельно исправили. Хорошо.

Теперь уберите "or die(...)" после mysql_query и всё заработает.

K
На сайте с 13.11.2009
Offline
169
#4
'[umka:
;13605565']То есть, синтаксическую ошибку самостоятельно исправили. Хорошо.
Теперь уберите "or die(...)" после mysql_query и всё заработает.

убрала... ничего не изменилось:

Country Name :

Country Code :

тоесть в базе ничего не находится (((

[umka]
На сайте с 25.05.2008
Offline
456
#5

Вполне вероятно, что в базе не все диапазоны IP.

Чтобы в этом убедиться, сделайте поиск по базе с помощью, напрмиер, phpMyAdmin, подставив ваше значение (-1124213214)

K
На сайте с 13.11.2009
Offline
169
#6
'[umka:
;13605610']Вполне вероятно, что в базе не все диапазоны IP.
Чтобы в этом убедиться, сделайте поиск по базе с помощью, напрмиер, phpMyAdmin, подставив ваше значение (-1124213214)

вот вот, я как раз тоже на этом моменте ...почему этот лонг айпи получается с минусом ? )))))))))))

S3
На сайте с 29.03.2012
Offline
362
#7

вот у меня почему-то база очень любит имена полей в обратных кавычках...

K
На сайте с 13.11.2009
Offline
169
#8

Короче сделала так, вместо

$ip = ip2long($rem_ip);

Сделала так:

$ip = sprintf ("%u", ip2long ($rem_ip));

и всё заработало ))) Но у меня есть вопрос по анолгичному скрипту на текстовом файле , можно я тут задам?

---------- Добавлено 24.03.2015 в 23:46 ----------

Вот есть ещё такой скрипт , работает на текстовом файле базы

<?php

ini_set('display_errors', 1);
error_reporting(E_ALL);

$ip = "85.37.154.122";

function removeQuotes($str) {
return trim($str, '"\' ');
}
$search = ip2long($ip);
foreach(file('./file.txt', FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINE) as $line)
{
$tmp = array_map('removeQuotes', explode(',', $line));
if(ip2long($tmp[0]) <= $search && $search <= ip2long($tmp[1]))
{
echo 'Ваша страна: ', $tmp[2], '<br>',
'Ваш регион: ', $tmp[3], '<br>',
'Ваш город: ', $tmp[4], '<hr>';
}
}

?>

Файл file.txt имеет такое содержимое:

"85.37.154.8","85.37.154.15","IT","Tuscany","Florence"
"85.37.154.16","85.37.154.31","IT","Tuscany","Prato"
"85.37.154.32","85.37.154.39","IT","Tuscany","Pisa"
"85.37.154.40","85.37.154.63","IT","Tuscany","Arezzo"
"85.37.154.64","85.37.154.71","IT","Lazio","Rome"
"85.37.154.72","85.37.154.79","IT","Tuscany","Arezzo"
"85.37.154.80","85.37.154.103","IT","Lazio","Rome"
"85.37.154.104","85.37.154.111","IT","Tuscany","Florence"
"85.37.154.112","85.37.154.119","IT","Tuscany","Arezzo"
"85.37.154.120","85.37.154.127","IT","Tuscany","Pisa"
"85.37.154.128","85.37.154.143","IT","Lazio","Rome"
"85.37.154.144","85.37.154.151","IT","Tuscany","Prato"
"85.37.154.152","85.37.154.175","IT","Tuscany","Florence"
"85.37.154.176","85.37.154.183","IT","Tuscany","Pisa"
"85.37.154.184","85.37.154.191","IT","Tuscany","Arezzo"
"85.37.154.192","85.37.154.207","IT","Tuscany","Florence"
"85.37.154.208","85.37.154.223","IT","Tuscany","Pisa"
"85.37.154.224","85.37.154.239","IT","Lazio","Rome"
"85.37.154.240","85.37.155.15","IT","Tuscany","Florence"

В итоге получаю такую ошибку

Notice: Use of undefined constant FILE_IGNORE_NEW_LINE - assumed 'FILE_IGNORE_NEW_LINE' in /home/.............htdocs/2015.php on line 12

12-ая строка это вот эта

foreach(file('./file.txt', FILE_SKIP_EMPTY_LINES|FILE_IGNORE_NEW_LINE) as $line)

Почему так , и как исправить?

[umka]
На сайте с 25.05.2008
Offline
456
#9
Kristinka:
В итоге получаю такую ошибку

Notice: Use of undefined constant FILE_IGNORE_NEW_LINE - assumed 'FILE_IGNORE_NEW_LINE' in /home/.............htdocs/2015.php on line 12

Почему так , и как исправить?

Почитать здесь:

http://php.net/manual/en/function.file.php

Найти отличие в названиях флагов.

K
На сайте с 13.11.2009
Offline
169
#10
'[umka:
;13605678']Почитать здесь:
http://php.net/manual/en/function.file.php

Найти отличие в названиях флагов.

Дошлооооо ))))))))))) Букву S пропустила )))))))))))))

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий