PHP PDO对非对象上的成员函数execute()的调用


PHP PDO Call to a member function execute() on a non object

所以我使用准备好的语句来处理从我的cordova应用程序到数据库的JSON调用。

现在,我正试图根据POST ed的纬度和经度获取附近的位置,但准备好的语句不起作用。

当我将变量设置为只测试时,我得到了一个Call to a member function execute() on a non object错误。

我不知道我做错了什么!

    error_reporting(E_ALL);
    $lat = 42.35674265310388;
    $lon = -71.13770473755070;
    $miles = 5;
    //$lat = $_POST["lat"];
    //$lon = $_POST["lon"];
    $data = array();
    $sth = $mysqli->prepare('SELECT *, (3959 * acos(cos(radians(?)) * cos(radians(lat)) * cos(radians(lon) - radians(?)) + sin(radians(?)) * sin(radians(lat)))) AS distance FROM members WHERE (3959 * acos(cos(radians(?)) * cos(radians(lat)) * cos(radians(lon) - radians(?)) + sin(radians(?)) * sin(radians(lat)))) < ? ORDER BY distance 5');
    $sth->execute(array($lat, $lon, $lat, $lat, $lon, $lat, $miles));
    $row = $sth->fetch();
    $data["markers"][] = array
    (
        "lat" => $row['lat'],
        "lon" => $row['lon']
    );
    print_r($data);
    echo json_encode($data);

此外,I var_dump()$lat $lon$miles变量进行了处理,如下所示。

lat - float(42.356742653104)
lon - float(-71.137704737551)
miles - int(5)
$sth = $mysqli->prepare('SELECT *, (3959 * acos(cos(radians(?)) * cos(radians(lat)) * cos(radians(lon) - radians(?)) + sin(radians(?)) * sin(radians(lat)))) AS distance FROM members WHERE (3959 * acos(cos(radians(?)) * cos(radians(lat)) * cos(radians(lon) - radians(?)) + sin(radians(?)) * sin(radians(lat)))) < ? ORDER BY distance 5');

query中似乎有错误,由于syntax validation故障ORDER BY distance 5错误,它甚至在执行之前就准备失败了。

它应该是任一

ORDER BY distance ASC

ORDER BY distance DESC