0

私は、特定の場所(座標緯度/経度のペア)について、特定の開始場所から特定の半径内にあるすべてのエンティティ(データベースから取得)を表示するアプリを開発しています。

私はテストしましたが、最も近い場所を見つけるために使用しているロジックはうまく機能します。ただし、MySQLテーブルと通信するためのPHPスクリプトで、問題が発生しています。

これが私が試みている私のクエリです、それは私にテーブルからの結果を与えません:

$sql = "SELECT * FROM merchants WHERE latitude BETWEEN '$lat1' AND '$lat2' AND longitude BETWEEN '$lon1' AND -90.2745 AND category='$merchCategory'";           

ただし、$ lat1、$ lat2、$ lon1、および$ lon2をエコーアウトすると、有効な値が含まれていることがわかります(これにより、クエリの結果が生成されます(参考:これらの4つの変数は、特定の場所からの半径の正方形を表します。緯度経度は表の列です。)

$lon1= -90.644843447 $lon2= -90.274500553 $lat1= 38.3496784638 $lat2= 38.6395335362

ただし、これは機能します($ lon2変数で値を参照するのではなく、値をハードコーディングするだけです。

$sql = "SELECT * FROM cashbackengine_merchants WHERE latitude BETWEEN '$lat1' AND '$lat2' AND longitude BETWEEN '$lon1' AND **-90.2745** AND category='$merchCategory'";            

これがそうであるように:

$sql = "SELECT * FROM cashbackengine_merchants WHERE latitude BETWEEN '$lat1' AND '$lat2' AND longitude BETWEEN **-90.64484** AND '$lon2' AND category='$merchCategory'";           

しかし、緯度にはまったく問題はありません。これは構文と関係があり、非常に単純なものである可能性が高いと強く感じています。どんな助けでも大歓迎です!

4

1 に答える 1

1

これを試して

$sql = "SELECT * FROM merchants WHERE latitude BETWEEN '$lat1' AND '$lat2' AND longitude BETWEEN $lon1 AND $lon2 AND category='$merchCategory'";

よくわかりませんが、これは、BETWEENでケースに2つの数値が必要であり、それを文字列として渡しているためだと思います'$lon'。また、1つの値をハードコーディングすると、他の値は自動的に数値に変換されます。

補足:ユーザーがlat / lon値を入力している場合は、プリペアドステートメント(最良)または文字列のエスケープを調べてください。これにより、SQLインジェクションが可能になります。

于 2012-08-04T05:09:24.727 に答える