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変数には 2 つの名前があります。代わりにこれを試してください:

$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 に答える