我想創建一個目錄,您可以根據您提供的參數進行搜索。 naam是產品的名稱,woord是給定的字符。稍後在腳本中,我將這部分查詢粘貼到第一部分。我不能讓我喜歡的查詢工作
謝謝
if(strlen($whereQuery) > 0)
$whereQuery .= 'AND naam LIKE '%'.$woord.'%'';
else
$whereQuery = 'WHERE naam LIKE '%'.$woord.'%'';
我想創建一個目錄,您可以根據您提供的參數進行搜索。 naam是產品的名稱,woord是給定的字符。稍後在腳本中,我將這部分查詢粘貼到第一部分。我不能讓我喜歡的查詢工作
謝謝
if(strlen($whereQuery) > 0)
$whereQuery .= 'AND naam LIKE '%'.$woord.'%'';
else
$whereQuery = 'WHERE naam LIKE '%'.$woord.'%'';
我寧願使用雙引號,以避免混亂,
或簡單地說,
if(strlen($whereQuery) > 0)
$whereQuery .= " AND naam LIKE '%$woord%' ";
else
$whereQuery = " WHERE naam LIKE '%$woord%' ";
一點題外話,查詢很容易受到SQL Injection
的影響如果變量的值(s)來自外部。請看下面的文章,瞭解如何防止它。通過使用PreparedStatements
你可以擺脫使用單引號圍繞值。
或者只是:'$ whereQuery =「其中naam LIKE'%$ woord%'';'因爲你在雙引號中,無論如何... – Neal 2013-02-20 15:44:21
@Neal好點。 – 2013-02-20 15:45:32
這不會工作,因爲您有額外的單引號 – 2013-02-20 15:47:06
你需要逃脫是查詢的一部分引號:
if(strlen($whereQuery) > 0)
$whereQuery .= 'AND naam LIKE \'%'.$woord.'%\'';
else
$whereQuery = 'WHERE naam LIKE \'%'.$woord.'%\'';
或者使用單引號和雙引號的混合。
使用雙引號。
或者逃脫單引號。
也請不要做你現在正在做的事情。
Don't use mysql_*
functions in new code。他們不再維護and are officially deprecated。請參閱red box?請改爲了解prepared statements,並使用PDO或MySQLi - this article將幫助您決定哪個。如果您選擇PDO,here is a good tutorial。
任何使用顏色編碼的編輯器都會立即向您顯示問題。只要看看你的代碼就可以了。
試試這個:
$whereQuery = ($whereQuery ? $whereQuery." AND" : " WHERE")." naam LIKE '%".$woord."%'";
這避免重複整個 「LIKE」 部分兩次)
此外,還要確保你已經正確轉義$woord
。在這種情況下,mysql_real_escape_string
是不夠的。您還需要通過preg_replace("/[%_]/","\\$1",$woord);
運行它以在WHERE子句中轉義特殊字符。
究竟是什麼問題?標題沒有提供任何信息,也沒有提供實際的問題。 – Woot4Moo 2013-02-20 15:43:34
「你無法工作」是什麼意思?預期的結果是什麼,你得到了什麼?你有什麼錯誤嗎? – rcdmk 2013-02-21 00:47:10