0

代码来自api.php

    $lat = $_GET['lat'];
    $lng = $_GET['lon'];

    try {$dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);}
    catch(PDOException $e){echo($e->getMessage());}

    $stmt = $dbh->prepare("SELECT *, (POW(69.1 * (`lat` - :lat), 2) +
                            POW(69.1 * (:lon - `long`) * COS(`lat` / 57.3), 2)) AS distance
                            FROM `venues` HAVING distance < SQRT(16) ORDER BY distance");
    $stmt->bindParam(':lat', $lat, PDO::PARAM_STR);
    $stmt->bindParam(':lon', $lon, PDO::PARAM_STR);


    $venues = array();
    if ($stmt->execute()) {
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            $venues[] = $row;       
            echo $_GET['jsoncallback'] . json_encode($venues);
        }
    }

这在访问时不返回任何内容api.php?lat=LAT_VALUE&lon=LON_VALUE

但是,当我输入 SQL 时:

SELECT * , (
POW( 69.1 * (`lat`-'LAT_VALUE'),2) + POW(69.1*('LON_VALUE'-`long`)*COS(`lat`/57.3),2)) AS distance
FROM  `venues` 
HAVING distance < SQRT( 16 ) 
ORDER BY distance
LIMIT 0 , 30

...它返回结果就好了。

我的语法有什么问题?

4

2 回答 2

1

$lon/$lng变量有两个名称。试试这个:

$lon = $_GET['lon'];
于 2013-06-02T01:22:18.953 回答
0

问题就在这里。您正在使用:lon而不是lng在查询中

  $stmt = $dbh->prepare("SELECT *, (POW(69.1 * (`lat` - :lat), 2) +
                POW(69.1 * (:lon - `long`) * COS(`lat` / 57.3), 2)) AS distance
                  FROM `venues` HAVING distance < SQRT(16) ORDER BY distance");

改为使用

$stmt = $dbh->prepare("SELECT *, (POW(69.1 * (`lat` - :lat), 2) +
                  POW(69.1 * (:lng - `long`) * COS(`lat` / 57.3), 2)) AS distance
                   FROM `venues` HAVING distance < SQRT(16) ORDER BY distance");
于 2013-06-02T01:30:24.297 回答