2013-02-18 108 views
0

嗨,我試圖做一個查詢,它接收查詢字符串的值,但不工作,我認爲它自己的查詢是不好的。你可以幫幫我嗎?Sql Query LIKE不能正常工作

所以,我收到

<%String detalhe = request.getParameter("value");%> 

我不會把連接之類的東西,因爲他們與其他querys工作查詢,所以這個問題是不連接。

// sql query to retrieve values from the specified table. 

String QueryString = "SELECT * FROM ebooko.dadoslivros WHERE Autor LIKE '%"+detalhe+"%' 

OR ano LIKE '%"+detalhe+"%'";; 
rs = statement.executeQuery(QueryString); 

它根本無法取回價值,我查詢。

其他信息: 表:dadoslivros 我需要比較值的列:Autor,ano。

例如,當我運行HREF傳遞的值是:儒勒%凡爾納(我GESS它改變了空間以「%」

+2

尼斯[SQL注入漏洞](http://bobby-tables.com)。享受你的服務器pwn3d。 – 2013-02-18 18:09:35

+1

如果您使用String'「Jules%Verne」'硬編碼的字符串,查詢是否有效?我可以想象,通過瀏覽器將'%'轉換爲'%25'到您的服務器。 – scones 2013-02-18 18:14:21

+0

馬克,因爲這是一個學校工作,我們剛剛開始學習這種安全不是我熟悉的事情,仍然很高興知道,我會改變它。 – HugoMonteiro 2013-02-18 19:15:46

回答

1

使用URLDecoder#decode()在查詢字符串中的參數進行解碼

。 。

你也應該考慮使用PreparedStatement防止SQL injection攻擊

+0

我看到了你給我的鏈接,但我無法理解,還是謝謝你;) – HugoMonteiro 2013-02-18 19:24:04

0

我解決它更改查詢:

String QueryString = "SELECT * FROM dadoslivros WHERE (Data LIKE '%"+detalhe+"%') OR (Autor LIKE '%"+detalhe+"%')";; 

也許它可以幫助另一個人;)