我正在尝试从我的表geo_address
获得一些结果我已经按照谷歌的this教程,但结果总是空的。 $lat
和$lng
取自表格中的实际数据...因此至少应显示1个结果。
我缺少什么?
$lat = "51.460873";
$lng= "-0.219140";
$radius = "15";
$sql = "SELECT lat, lng, ( 3959 * acos( cos( radians(':lat') ) *
cos( radians( lat ) ) * cos( radians( lng ) - radians(':lng') )
+ sin( radians(':lat') ) * sin( radians( lat ) ) ) )
AS distance FROM geo_address
HAVING distance < ':radius' ORDER BY distance LIMIT 0 , 20";
$query = $this->db();
$query = $query->prepare($sql);
$query->bindValue(":lat",$lat);
$query->bindValue(":lng",$lng);
$query->bindValue(":radius",$radius);
$query->execute();
$result = $query->fetchAll(PDO::FETCH_ASSOC);
var_dump($result);
if (empty($result)) {
echo "empty";
return;
}
编辑:我在将值硬编码到查询中后,现在会返回结果,但我无法使用bindValue
为什么?
答案 0 :(得分:0)
ORDER BY distance
尝试添加ASC
后 - 如果没有订单指示,您的查询可能会失败。
答案 1 :(得分:0)
您在sql中引用参数,即':lat'
。
尝试删除它们。
$sql = "SELECT lat, lng, ( 3959 * acos( cos( radians(:lat) ) *
cos( radians( lat ) ) * cos( radians( lng ) - radians(:lng) )
+ sin( radians(:lat) ) * sin( radians( lat ) ) ) )
AS distance FROM geo_address
HAVING distance < :radius ORDER BY distance LIMIT 0 , 20";
答案 2 :(得分:-1)
尝试将变量更改为数字
$lat = "51.460873";
$lng= "-0.219140";
$radius = "15";
成为:
$lat = 51.460873;
$lng = -0.219140;
$radius = 15;
然后从SQL语句中的绑定变量中删除(不必要的)引号:
radians(':lat')
radians(':long')
distance < ':radius'
成为
radians(:lat)
radians(:long)
distance < :radius