這是bizzarre我有一個數據庫,存儲多邊形和查詢運行,檢查是否存在一個點內任何多邊形和檢索它們。然而,當我的php代碼中的查詢被創建爲一個sql字符串時,它不會返回任何結果,但是如果我手動輸入查詢 - 它將完美運行!空間幾何SQL - 兩個完全相同的查詢一個工程其他不
#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)'));
繼承人如何我實際上正在生成的SQL:
公共職能get_by_coords($緯度,$經度){
// 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, $longitude
實際上是從一個GET變量字符串傳遞。我試圖強調,但結果如下:
$latitude = "25.276987";
(float)$latitude; // equals zero
這是怎麼回事?我在這裏使用Codeigniter。
UPDATE我只是做了一個var_dump,發現一些奇怪的東西。如果我的var_dump創建的SQL查詢它顯示有6個字符,比我的var_dump查詢直接在一個字符串類型,即:
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個額外的字符 - 我有一個奇怪的感覺,這些都是導致問題..我怎麼走得更遠......
嘗試用參數打印查詢,然後在它上面啓動server..check,如果它正在工作然後或不是。因爲U告訴你,你手動嘗試,它的工作。 – adi
也在你發佈的第二個查詢中包含用逗號隔開的座標,這在你的第一個查詢中不存在。 – adi
DId,實際上只是將逗號更改爲輸出的內容。沒有變化 - 第一個查詢給了我一個結果,另一個沒有給出任何結果。它的座標完全被忽略。 – Ali