2017-03-09 50 views
-1

我有一個表命名的消息,其中一個條目包含相同,如下所示:PHP:具有在哪裏不是MySQL查詢工作結合

longtitude = 4.867478333333334 
latitude = 52.31819833333334 
username = 'pb' 

如果我在表中查詢與下面:

$longitude=4.867478333333334 
$latitude=52.31819833333334 
$username='pb' 
$search='' 
$visibledistance=2 

使用下面的MySQL查詢:

我沒有得到任何結果。如果我移除距離<'$ visibledistance',我會得到所有符合其餘標準的條目,所以除了它的距離部分外沒有任何問題。有人能幫助我理解我能做到這一點嗎?

謝謝!

+2

*「如果我在桌面上用下面的方式查詢:」* - 您是否關閉了每條語句?這是未來(新手)訪問者的技術支持,他們可能認爲這是在php中的有效語法。 –

+2

在旁註中,我希望這不會進入從互聯網執行的代碼。這是SQL注入的定義。 – v010dya

+0

請參閱http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php和http://stackoverflow.com/documentation/php/5828/pdo/2685/preventing- sql -injection-with-parameterized-queries#t = 201703091904411986445欲瞭解更多信息 – WOUNDEDStevenJones

回答

1

,如果你有數值,你應該避免周圍的瓦爾

單引號,你應該使用CONCAT像

(爲有,如果你用「$ visibledistance」你EVAL HAVING distance < '4'(你是EVAL你距離對於字符串)

展望代碼
不使用聚合函數,所以你不需要有你可以通過

地方使用(但諾伊別名)郝曉紅和distcint代替組
$query=("SELECT distinct 
    subject,username,message,timestamp,(
     6371 * acos (
      cos (radians($latitude)) 
     * cos(radians(Messages.latitude)) 
     * cos(radians(Messages.longitude) - radians($longitude)) 
     + sin (radians($latitude)) 
     * sin(radians(Messages.latitude)) 
    ) 
    ) AS distance FROM Messages WHERE username ='pb' AND ((subject LIKE concat('%', '$search', '%') 
      OR (message LIKE concat('%','$search','%'))  

    WHERE (
     6371 * acos (
      cos (radians($latitude)) 
     * cos(radians(Messages.latitude)) 
     * cos(radians(Messages.longitude) - radians($longitude)) 
     + sin (radians($latitude)) 
     * sin(radians(Messages.latitude)) 
    ) 
    ) < $visibledistance 
    ORDER BY timestamp"); 
+0

謝謝,我從數值中刪除了所有單引號,但結果是一樣的。我的懷疑是這與用「消息」處理緯度和經度領域有關,因爲我看到其他人處理這個相同的任務,被鼓勵使用JOIN,但我不確定我是否真的需要做那。 –

+0

加入或在哪裏條件做相同的結果..所以這我不是問題..而是檢查真實的數據.. ...嘗試獲得由PHP建立真正的查詢嘗試執行它在SQL IDE .... (也可能是$ search =''不好) – scaisEdge

+0

我的意思是說我說的是「messages.latitude」 - 從來沒有在這種方式之前使用列來處理。搜索工作正常,因爲它是..如果我刪除HAVING,GROUP BY和「.............. AS距離」部分,事情工作正常 - 這是它以前是如何,但現在我需要查詢的一部分來考慮座標,這正是我正在努力的。 –