[英]Spatial Geomety SQL - two exact same queries one works the other doesn't
我有一個存儲多邊形的數據庫,並且運行查詢來檢查任何多邊形中是否存在點並檢索它們,這真是一件令人毛骨悚然的事情。 但是,當查詢在我的php代碼中創建為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($ latitude,$ longitude){
// 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
其中$latitude, $longitude
是作為字符串從GET變量傳遞的。 我嘗試過打字,但結果是:
$latitude = "25.276987";
(float)$latitude; // equals zero
這里發生了什么? 我在這里使用Codeigniter。
更新我只是做了一個var_dump,發現了一些奇怪的東西。 如果我使用var_dump創建的SQL查詢,則顯示的字符數比使用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個額外的字符-我有一種奇怪的感覺,這些都是引起問題的原因..我該怎么做...
據我記得,在php函數中,我們仍然需要在參數前面加上美元符號。
就像....($latitude), ($longitude));
在功能內
因此你的函數參數應該是
public function get_by_coords($latitude,$longitude){
$sql = sprintf("SELECT * FROM locations WHERE type = 'polygon' AND locationable_type = 'Notification'
AND ST_CONTAINS(locations.geoshape, GeomFromText('point(%s, %s)') )", ($latitude), ($longitude));
}
嘿,抱歉,您的回復很晚。 我設法找出問題所在。 我對生成的sql和手動輸入的sql進行了簡單的查找,發現長度不符。 有一些隱藏的字符-簡單地刪除了不可打印的字符,它就像一種魅力。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.