php mysql запрос широта долгота - PullRequest
1 голос
/ 08 апреля 2011

Я настраиваю широту / долготу поиска ближайших городов. Он основан на примере Google .

Код

    $query = sprintf("SELECT Zip, City, State, Lat, Long, ( 3959 * acos( cos( radians('%s') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( lat ) ) ) ) AS distance FROM Zips HAVING distance < '%s' ORDER BY distance LIMIT 0 , 18",
      mysql_real_escape_string($lat),
      mysql_real_escape_string($lng),
      mysql_real_escape_string($lat),
      mysql_real_escape_string($radius));
    $result = mysql_query($query, $dbConn);

Error

Invalid query: 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 'Long, ( 3959 * acos( cos( radians('37') ) * cos( radians( lat ) ) * cos( radians' at line 1 Whole query: SELECT Zip, City, State, Lat, Long, ( 3959 * acos( cos( radians('37') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('-122') ) + sin( radians('37') ) * sin( radians( lat ) ) ) ) AS distance FROM Zips HAVING distance < '50' ORDER BY distance LIMIT 0 , 18

Обновление - рабочий пример

    $query = sprintf("SELECT `Zip`, `City`, `State`, `Lat`, `Long`, ( 3959 * acos( cos( radians('%s') ) * cos( radians( `Lat` ) ) * cos( radians( `Long` ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( `Lat` ) ) ) ) AS distance FROM Zips HAVING distance < '%s' ORDER BY distance LIMIT 0 , 18",
      mysql_real_escape_string($lat),
      mysql_real_escape_string($lng),
      mysql_real_escape_string($lat),
      mysql_real_escape_string($radius));
    $result = mysql_query($query, $dbConn);

Ответы [ 2 ]

6 голосов
/ 08 апреля 2011

Long является зарезервированным словом .

Избегайте имен столбцов, чтобы MySQL не думал, что вы пытаетесь использовать запятую:

SELECT `Zip`, `City`, `State`, `Lat`, `Long`, 
( 3959 * acos( cos( radians('%s') ) * cos( radians( `Lat` ) ) * cos( radians( `Long` ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( `Lat` ) ) ) ) AS distance 
FROM Zips 
HAVING distance < '%s' 
ORDER BY distance LIMIT 0 , 18
4 голосов
/ 08 апреля 2011

Long - ключевое слово mysql. Вы должны либо переименовать столбец, либо заключить имя столбца в обратные галочки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...