在php脚本中返回值

时间:2015-09-08 19:44:49

标签: php

我想在我的应用中返回最近商店的距离和纬度。但是当我在浏览器中运行此脚本时,我得到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;
    }

2 个答案:

答案 0 :(得分:2)

设置获取模式不会带来结果,它只会设置查询的默认提取模式(数字或关联)。尝试将setFetchMode更改为fetchAll并删除周围的array(...)。所以像这样:

$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

另外,返回整个结果。我假设对3列进行查询,然后只返回第一列进行调试。

答案 1 :(得分:2)

根据文档setFetchMode旨在提供设置并返回bool。

是不是你要将这个bool分配给数组$result并简单地返回它而不是获取和返回值?

尝试将setFetchMode更改为fetchAll或类似内容,以实际收集$stmt对象的结果。正如@JonathanKuhn建议的那样,同时删除它周围的array(...)fetchAll,其亲属将按设计返回数组类型。