2013-02-20 32 views
-2

我想創建一個目錄,您可以根據您提供的參數進行搜索。 naam是產品的名稱,woord是給定的字符。稍後在腳本中,我將這部分查詢粘貼到第一部分。我不能讓我喜歡的查詢工作

謝謝

if(strlen($whereQuery) > 0) 
    $whereQuery .= 'AND naam LIKE '%'.$woord.'%''; 
else 
    $whereQuery = 'WHERE naam LIKE '%'.$woord.'%''; 
+0

究竟是什麼問題?標題沒有提供任何信息,也沒有提供實際的問題。 – Woot4Moo 2013-02-20 15:43:34

+0

「你無法工作」是什麼意思?預期的結果是什麼,你得到了什麼?你有什麼錯誤嗎? – rcdmk 2013-02-21 00:47:10

回答

1

我寧願使用雙引號,以避免混亂,

​​

或簡單地說,

if(strlen($whereQuery) > 0) 
    $whereQuery .= " AND naam LIKE '%$woord%' "; 
else 
    $whereQuery = " WHERE naam LIKE '%$woord%' "; 

一點題外話,查詢很容易受到SQL Injection的影響如果變量的值(s)來自外部。請看下面的文章,瞭解如何防止它。通過使用PreparedStatements你可以擺脫使用單引號圍繞值。

+1

或者只是:'$ whereQuery =「其中naam LIKE'%$ woord%'';'因爲你在雙引號中,無論如何... – Neal 2013-02-20 15:44:21

+0

@Neal好點。 – 2013-02-20 15:45:32

+0

這不會工作,因爲您有額外的單引號 – 2013-02-20 15:47:06

0

你需要逃脫是查詢的一部分引號:

if(strlen($whereQuery) > 0) 
    $whereQuery .= 'AND naam LIKE \'%'.$woord.'%\''; 
else 
    $whereQuery = 'WHERE naam LIKE \'%'.$woord.'%\''; 

或者使用單引號和雙引號的混合。

0

任何使用顏色編碼的編輯器都會立即向您顯示問題。只要看看你的代碼就可以了。

試試這個:

$whereQuery = ($whereQuery ? $whereQuery." AND" : " WHERE")." naam LIKE '%".$woord."%'"; 

這避免重複整個 「LIKE」 部分兩次)

此外,還要確保你已經正確轉義$woord。在這種情況下,mysql_real_escape_string是不夠的。您還需要通過preg_replace("/[%_]/","\\$1",$woord);運行它以在WHERE子句中轉義特殊字符。