我想在我的应用中返回最近商店的距离和纬度。但是当我在浏览器中运行此脚本时,我得到null。如果我删除['纬度'],那么我得到数组(1){[0] => bool(true)}。这就是我调用函数的方式。我是否必须有一个表来循环函数的结果并提供行?
$damn = getClosestS(37.292999, -122.555333);
var_dump($damn);
function getClosestDriver($plat, $plon) {
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT id, latitude, longitude, ( 3959 * acos( cos( radians($plat) ) *
cos( radians( latitude ) ) * cos( radians( longitude ) - radians($plon) ) +
sin( radians($plat) ) * sin( radians( latitude ) ) ) ) AS distance
FROM drivers HAVING distance < 2500 ORDER BY distance LIMIT 0 , 20");
$stmt->execute();
// set the resulting array to associative
$result = array($stmt->setFetchMode(PDO::FETCH_ASSOC));
return $result['latitude'];
} catch (PDOException $e) {
echo $stmt . "<br>" . $e->getMessage();
}
$conn = null;
}
答案 0 :(得分:2)
设置获取模式不会带来结果,它只会设置查询的默认提取模式(数字或关联)。尝试将setFetchMode
更改为fetchAll
并删除周围的array(...)
。所以像这样:
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
另外,返回整个结果。我假设对3列进行查询,然后只返回第一列进行调试。
答案 1 :(得分:2)
根据文档setFetchMode旨在提供设置并返回bool。
是不是你要将这个bool分配给数组$result
并简单地返回它而不是获取和返回值?
尝试将setFetchMode
更改为fetchAll
或类似内容,以实际收集$stmt
对象的结果。正如@JonathanKuhn建议的那样,同时删除它周围的array(...)
为fetchAll
,其亲属将按设计返回数组类型。