#sql #api #google-maps
#sql #API #google-карты
Вопрос:
Я пытаюсь создать локатор магазина для заправочных станций с помощью Google Maps api. Я сделал все, как описано здесь (http://code.google.com/apis/maps/articles/phpsqlsearch.html ), но
- Функция поиска адреса не распознает большую часть входных данных (я могу с этим смириться)
- Инструкция SQL, предоставленная Google, не возвращает никаких результатов (я проверил это, заменив инструкцию на «
SELECT * FORM markers
«, которая работает)
Моя таблица DB выглядит следующим образом
ID
NAME
ADDRESS
LAT
LNG
и утверждение, с которым у меня возникают проблемы, является:
$query = sprintf("SELECT name, address, lat, lng ( 6371 * acos( cos( radians('%s') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) sin( radians('%s') ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < '%s' ORDER BY distance LIMIT 0 , 5",
mysql_real_escape_string($center_lat),
mysql_real_escape_string($center_lng),
mysql_real_escape_string($center_lat),
mysql_real_escape_string($radius));
$result = mysql_query($query);
который получает свои значения из адресного поиска.
Есть ли у кого-нибудь опыт работы с этой или подобной проблемой?
редактировать: обнаружена первая ошибка: я пропустил запятую между lng и (6371 … если я вставлю это непосредственно в phpmyadmin (заменив ‘%s’ реальными значениями), я получу желаемый результат, поэтому я полагаю, что проблема заключается в передаче переменных в SQL; надеюсь, это поможет сузить поиск.
Комментарии:
1. повторите запрос $ query на странице и внимательно посмотрите на него, вставьте его в свой инструмент управления БД и проверьте: а) вычисленный запрос действителен и б) у вас есть некоторые совпадающие результаты.
2. Действительно ли все эти ‘%s’ должны быть строками?
3. @Catcall: ну, это моя большая проблема. Я не знаю, как передать переменные (координаты начальной точки) из моего index.php к инструкции sql.
Ответ №1:
Вам нужно передавать значения с плавающей точкой вместо строк, поэтому ваш php должен быть
$query = sprintf("SELECT name, address, lat, lng, ( 6371 * acos( cos( radians(%f) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(%f) ) sin( radians(%f) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < %d ORDER BY distance LIMIT 0 , 5",
mysql_real_escape_string($center_lat),
mysql_real_escape_string($center_lng),
mysql_real_escape_string($center_lat),
mysql_real_escape_string($radius));
$result = mysql_query($query);
Комментарии:
1. Вы унаследовали недостающую запятую из исходного фрагмента, который был замечен @richey. (Теперь добавлена запятая.)