存储定位器与 SQL



我正在尝试使用谷歌地图API为加油站构建一个商店定位器。我已经按照此处(http://code.google.com/apis/maps/articles/phpsqlsearch.html)所述完成了所有操作,但是

  1. 搜索地址功能无法识别大部分输入(我可以接受)
  2. 谷歌提供的SQL语句不返回任何结果(我已经通过将语句替换为" 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);

它从地址搜索中获取其值。

有人有遇到这个问题或类似问题吗?

编辑:发现第一个错误:我错过了液化天然气和(6371...如果我直接在phpmyadmin中插入它(用实际值替换"%s"),我会得到我想要的结果,所以我想问题是将变量传递给SQL;希望这有助于缩小范围。

你需要传入浮点数而不是字符串,所以你的 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);

相关内容

  • 没有找到相关文章

最新更新