簡體   English   中英

Spatial Geomety SQL-兩個完全相同的查詢,一個有效,另一個無效

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM