Локатор магазина против SQL - PullRequest
1 голос
/ 20 мая 2011

Я пытаюсь построить магазин локатор для АЗС с Google Maps API. Я сделал все, как описано здесь (http://code.google.com/apis/maps/articles/phpsqlsearch.html),, но

  1. Функция поиска адреса не распознает большую часть ввода (я могу жить с этим)
  2. Оператор SQL, предоставленный Google, не возвращает никаких результатов (я проверил это, заменив оператор на "SELECT * FORM markers", который работает)

Моя таблица БД выглядит как

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);

, который получает свои значения из поиска адреса.

Кто-нибудь имеет опыт решения этой или подобной проблемы?

edit: обнаружил первую ошибку: пропустил запятую между lng и (6371 ... если я вставлю это непосредственно в phpmyadmin (заменив '% s' реальными значениями), я получу желаемый результат, поэтому я предполагаю, что проблема заключается в передаче переменных в SQL; надеюсь, что это поможет сузить его.

1 Ответ

0 голосов
/ 01 августа 2011

Вы должны передавать числа с плавающей точкой вместо строк, поэтому ваш 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...