我正在尝试使用google maps api为加油站建立商店定位器。 我完成了这里描述的所有事情(http://code.google.com/apis/maps/articles/phpsqlsearch.html),但是
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);
从地址搜索中获取其值。
有没有人遇到过这种或类似的问题?
编辑:发现第一个错误:我错过了lng和(6371之间的逗号... 如果我直接在phpmyadmin插入这个(用'%s'代替实际值)我得到我想要的结果,所以我想问题是将变量传递给SQL; 希望有助于缩小范围。
答案 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);