【发布时间】:2013-11-19 15:53:37
【问题描述】:
我正在尝试从我的表 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 一起使用,为什么?
【问题讨论】:
-
您没有检查来自数据库查询的任何返回值 - 您的
var_dump($result)返回什么? -
array(0) { }这是我的转储 -
如果你去掉 HAVING 子句,你会得到任何结果吗?
-
您的查询中有两个对
:lat的引用 - 我不知道您是否可以一次绑定到多个占位符。此外,您在查询 (':lat') 中的占位符周围有引号,而这些不是必需的 - 您的prepare() 会为您处理引号。
标签: php mysql geolocation geospatial