2017-02-28 42 views
1

試圖尋找我的問題的答案。如果有人問過類似的問題,請將我指向該頁面。MYSQL/PHP:選擇一部分的字或完全匹配

我有一個表單,用戶在一個或多個文本字段中鍵入搜索詞。

然後傳遞到SQL statment:

WHERE st.Description LIKE '%$Description%' 
AND st.Number LIKE '%$Number%' 
AND st.Color LIKE '%$Color%' 

這將返回任何匹配該單詞包含用戶輸入。

有什麼辦法,如果用戶使用引號(如「搜索詞」),它會搜索完全匹配?

什麼是最佳實踐?

+1

你可以在查詢本身處理這個邏輯,或者更好地處理它在PHP代碼中。如果搜索字符串包含引號,則使用不帶'''通配符'的不同'LIKE'表達式。 –

+0

你的意思是循環輸入文件並使用if語句,如果它包含引號?如果是的話,把表達式到php變量? – Tronik

+1

我的意思是檢查您的PHP代碼中的輸入,並適當地處理引號。基本上,如果引號含有'LIKE'搜索字符串'',而'LIKE'%搜索字符串%''不含引號。 –

回答

0

你可以做到這一點形成的PHP代碼,excuting查詢之前

讓我們假設serch含詞是在一個名爲$keyword

<?php 
if(substr($keyword, 0, 1) == '"' && substr($keyword, -1, 1) ==='"'){ 
    $search = ' = ' . substr($keyword, 1, -1); 
}else{ 
    $search = ' LIKE ' . '%' . $keyword . '%'; 
} 

然後使用$search變量在查詢變量

<?php 
    $sql = ... WHERE st.Description $search and st.Number $search and st.Color $search 

不要忘記使用準備的語句來防止SQL injections

而對於性能問題,如果你正在尋找一個確切的詞,不使用LIKE關鍵字,使用=比較符號

+0

我試圖使用這個,但也包括'LIKE'表達式作爲$ search ='LIKE%'。$ searchOpts ['Description']。'%';但它不會工作 – Tronik

+0

我將此添加到'$ search'變量 –

+0

另外,你真的不得不在你的sql查詢中使用'AND',我想你的意思是'OR' –

0

有什麼辦法,如果用戶使用的報價(如「搜索詞」)它會搜索完全匹配?

如果刪除與其搜索的引號完全相同的引號:WHERE st.Description LIKE '%search word%'。這意味着,當多個單詞作爲搜索詞提供時,您認爲您正在搜索不按順序出現的單詞。不是這種情況。推測給出你想要搜索所有的話多個單詞組成的短語:

WHERE st.Description LIKE '%search%' 
AND st.Description LIKE '%word%' 

什麼是最好的做法?

從A 非常很長的路要走目前你在做什麼:使用全文索引或建立自己的搜索關鍵字。

相關問題