これはうんざりです。ポリゴンとその中にポイントが存在するかどうかをチェックして取得するクエリを格納するデータベースがあります。しかし、私のPHPコードのSQL文字列としてクエリが作成された場合、何も返しませんが、手動でクエリを入力すると、完全に実行されます!Spatial Geomety SQL - 2つの全く同じクエリが動作しない
#This works
SELECT * FROM locations
WHERE type = 'polygon' AND locationable_type = 'Notification' AND
ST_CONTAINS(locations.geoshape, GeomFromText('Point(25.276987 55.296249)')) ;
#This doesnt work
SELECT * FROM locations
WHERE type = 'polygon' AND locationable_type = 'Notification' AND
ST_CONTAINS(locations.geoshape, GeomFromText('Point(25.276987 55.296249)'));
HERESにどのように実際に生成されるSQL:
パブリック関数get_by_coords($緯度、$経度){
$latitude, $longitude
実際GET変数から文字列として渡され
// this grabs all the notifications
$sql = sprintf("SELECT * FROM locations WHERE type = 'polygon' AND locationable_type = 'Notification'
AND ST_CONTAINS(locations.geoshape, GeomFromText('point(%s, %s)'))", ($latitude), ($longitude));
。タイプキャストしようとしましたが、結果は
$latitude = "25.276987";
(float)$latitude; // equals zero
ここでは何ですか?ここでCodeigniterを使用しています。
更新私はvar_dumpを実行して、何か変わったものを見つけました。私が作成したSQLクエリをのvar_dump場合は、私が直接、文字列、すなわちで入力したクエリをのvar_dump場合よりも、それは6文字以上がある示しています
string(166) "SELECT * FROM locations WHERE type = 'polygon' AND locationable_type = 'Notification' AND ST_CONTAINS(locations.geoshape, Point('25.27116987','55.292216249'))"
string(160) "SELECT * FROM locations WHERE type = 'polygon' AND locationable_type = 'Notification' AND ST_CONTAINS(locations.geoshape, Point('25.27116987','55.292216249'))"
秒があるようであった最初の文字列が生成される - そのショーがあります。最初の文字列に6つの余分な文字 - 私はそれらが問題を引き起こしている奇妙な感じを持っています..ここに私はここに行くのですか...
パラメータを使用してクエリを印刷し、それをサーバー上で実行してみてください。それが動作しているかどうかを確認してください。 – adi
また、uが投稿した2番目のクエリには、最初のクエリーに存在しないコンマで区切られた座標が含まれています。 – adi
実際に出力された内容にちょうどカンマを変更しました。変更なし - 最初のクエリは、他のものが何も与えない結果を返します。その座標は完全に無視されます。 – Ali