我有查詢Select * from table1 where name like '%Whateveruserpassintextbox%'
。如何處理查詢中的%?
當用戶通過%
在文本框中查詢時返回所有的表數據。
什麼是處理這種情況的正確方法?
我有查詢Select * from table1 where name like '%Whateveruserpassintextbox%'
。如何處理查詢中的%?
當用戶通過%
在文本框中查詢時返回所有的表數據。
什麼是處理這種情況的正確方法?
試試做\%
匹配一個「%」字符。閱讀更多關於MySql Docs
要測試通配符的文字實例,請在其前面加上轉義字符。如果您未指定ESCAPE字符,則假定爲「\」。
-----------------------------------------
| String | Description |
-----------------------------------------
| \% | Matches one 「%」 character |
| \_ | Matches one 「_」 character |
-----------------------------------------
一開始,像這樣的查詢被稱爲一個性能殺手。通常你應該這樣做是有問題的。
但是,如果用戶通過在%
,你需要的東西,如逃吧:
select * from table1
where name like '%50\% off sale%'
escape "\";
我覺得\
實際上是默認轉義字符,但我傾向於在情況明確指定其默認的可能不斷變化。
因此,基本上,你預先處理字符串與\%
之前更換%
你把它在兩端的兩個%
標記之間。
您還應該通過像mysql_real_escape_string
這樣的過濾器傳遞任何用戶輸入以防止SQL注入攻擊。在執行上述建議的預處理之前,請執行此操作,以便您的\%
無意中變爲\\%
。
還有'%'
「任意數目的字符」通配符,你也應該逃避'_'
「一個字符」通配符,以免user_name
也將匹配像usersname
事情。
所以這個過程將是:從用戶
mysql_real_escape_string
。%
全部替換爲\%
來進一步清理它。_
全部替換爲\_
來進一步清理它。只有這樣,你甚至開始想想,你可能要考慮使用字符串:-)
表現殺手!你在這裏提到的好點 – Jayy 2012-02-24 06:26:35
希望這有助於
$search=$_POST['whatuserTypes'];
if($search == '%')
{
$query=("Select * from table1;");
}
else
{
$query = sprintf("SELECT * FROM table1 WHERE name like '%s'",
mysql_real_escape_string($search));
}
正確的方法是,以微薄的可能性解釋你想要什麼。只有在你知道之後,你才能實現它... – Konerak 2012-02-24 06:19:49
有關SQL注入的任何想法? – 2012-02-24 06:20:37
當用戶輸入%時,他只能得到與named中的%相匹配的數據。 – 2012-02-24 06:21:40