2012-03-29 84 views
0

在我正在處理的項目中,我需要一些幫助。在不知道用戶輸入是什麼的情況下進行查詢(SQL,PHP)

這裏是我想要做的事:

我與MySQL和PHP網頁上的工作。有一個輸入字段,用戶將輸入一個位置(國家,城市,州),日期,比賽長度或比賽名稱。問題是,他們可以輸入這些項目的任何組合(就像你可以在谷歌中)。

之後,我必須查詢數據庫才能顯示結果。這是我現在使用的查詢:

LIKE '$str%' 
OR city LIKE '$str%' 
OR state LIKE '$str%' 
OR country LIKE '$str%' 
OR race_distancia LIKE '$str%' 

$ str是一個持有輸入文本的php變量。

我正在使用'$ str%',因爲它會使用我創建的索引,儘管由於正則表達式在最後添加了,因此無法正常工作。所以如果我輸入例如:'邁阿密5k',它將不起作用。由於沒有比賽被稱爲邁阿密5K,也沒有一個位置......但是邁阿密有5克赫赫。

我在想空間上的輸入文本爆炸和每個爆炸項目運行查詢,然後刪除重複的結果。這將工作,但我試圖找到最有效的解決方案,我不確定如何避免重複的項目。

感謝先進!

+1

首先使用類似PDO(PHP數據庫對象)來準備查詢以防止SQL注入。 – 2012-03-29 20:22:14

+0

這些似乎相當定義的搜索條件,我會有一個國家的框,然後一個城市的框....可能有一個列表中的一些和他人的自由文本 – 2012-03-29 20:22:27

+0

如果空間爆炸將無法如果有一個兩個字的城市。此外,如果有人搜索一個也是州名的城市,IE「紐約紐約」,您的查詢將無法按預期進行。 – Norse 2012-03-29 20:40:33

回答

0

你可以輸入分解單詞使用:

$searchWords = explode(" ", $input); 

如果在洛杉磯有人類型,它將搜索「洛杉磯」和「洛杉磯」,但我認爲它會工作得很好。如果有許多結果,您可以使用更多輸入字段進行更高級的搜索。

編輯:我看到你設法得到這麼遠。要過濾雙字檢查:PHP : Find repeated words with and without space in text

編輯2:至於洛杉磯問題:也許使用「洛杉磯」作爲searchword是可以接受的。然後在一個數組中看到這個非常好的帖子:PHP explode the string, but treat words in quotes as a single word

相關問題