Поиск хранилища против SQL

#sql #api #google-maps

#sql #API #google-карты

Вопрос:

Я пытаюсь создать локатор магазина для заправочных станций с помощью Google Maps api. Я сделал все, как описано здесь (http://code.google.com/apis/maps/articles/phpsqlsearch.html ), но

  1. Функция поиска адреса не распознает большую часть входных данных (я могу с этим смириться)
  2. Инструкция 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. (Теперь добавлена запятая.)