存储定位器与SQL

时间:2011-05-20 12:20:33

标签: sql api google-maps

我正在尝试使用google maps api为加油站建立商店定位器。 我完成了这里描述的所有事情(http://code.google.com/apis/maps/articles/phpsqlsearch.html),但是

  1. 搜索地址功能无法识别大部分输入(我可以忍受)
  2. 谷歌提供的SQL语句不会返回任何结果(我通过用“SELECT * FORM markers”替换语句来检查它,这有效)
  3. 我的数据库表格看起来像

    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 个答案:

答案 0 :(得分:0)

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