我正在尝试使用谷歌地图API为加油站构建一个商店定位器。我已经按照此处(http://code.google.com/apis/maps/articles/phpsqlsearch.html)所述完成了所有操作,但是
- 搜索地址功能无法识别大部分输入(我可以接受)
- 谷歌提供的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);