2

PHP スクリプトで次のクエリを実行しています。

$radius_query = "SELECT zip, ( 3959 * acos( cos( radians(" . $latitude .") ) * cos(         radians( lat ) ) * cos( radians( lng ) - radians( " . $longitude . ") ) + sin( radians(" .     $latitude .") ) * sin( radians( lat ) ) ) ) AS distance 
FROM ZIP HAVING distance < ". $radius;
$radius_result = $db_zipcode->query($radius_query);


if (!$radius_result){
   echo 'Could not run query: ' . mysql_error();
   exit;
   }

$row = $radius_result->fetch(PDO::FETCH_ASSOC);

    While($row = $radius_result->fetch(PDO::FETCH_ASSOC))
{
     $zip[] = $row['zip'];
}


foreach ($zip as $zip_display){
echo $zip_display . ",  " . '';
}    

クエリ自体は、1 つの小さなエラーで機能します。データの最初の行が返されません。次のような郵便番号のリストが返されます。

40324、40339、40340、40347、40356...

これは、phpMyAdmin で同じクエリを実行したときに得られる結果です。

しかし、上記のクエリを PHP スクリプトで実行すると、結果セットは 40339 で始まり、残りのすべての郵便番号が含まれます。マイレージの問題ではありません (つまり、不足している zip は半径内に十分あります - phpMyAdmin でクエリを実行すると表示されます)。

データの最初の行を見逃すために PHP クエリで間違っていることは何ですか? クエリ結果をDBに挿入すると、最初の行も欠落しているため、表示の問題だけではありません。

ありがとう!

4

2 に答える 2

2

問題は最初fetchにあり、彼らはあなたの最初の行を取ります...実行せず $row = $radius_result->fetch(PDO::FETCH_ASSOC); にこれを実行してください。約1日前に同じ問題がありました。

于 2013-02-07T23:13:06.553 に答える
1

PHP で暗黙のループを実行する必要はありません。

$zip = $radius_result->fetchAll(PDO::FETCH_ASSOC);
于 2013-02-07T23:06:43.003 に答える