2013-02-18 112 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+"%')";; 

也许它可以帮助另一个人;)