【发布时间】:2018-04-25 18:38:33
【问题描述】:
我有下表: dummy_tbl
|id |Name |
----------
|1 |Test1|
|2 |Test2|
当我尝试在 SQlyog - MySql(5.6.80) 中执行以下查询时,它工作正常:
select * from dummy_tbl where name like \'Test1\';
但是当我使用 JDBC 语句从代码中尝试相同的查询时,它会抛出以下错误:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'Test1\'' at line 1
从代码中截取的代码:
String sql = "SELECT * from dummy_tbl where name like \'Test1\'";
Statement stmt= conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
【问题讨论】:
-
了解准备好的语句。这将防止 sql 注入和转义特殊字符
-
我们需要查看您的 Java 代码,但无论如何您都应该使用准备好的语句,这样您就可以完全避免当前的错误。
-
去掉单引号前面的反斜杠,在Test后面加上%sign
-
@Jen,我知道 PreparedStatement 用于防止 sql 注入,但这是我的遗留代码的要求。
-
任何不使用
PreparedStatements的要求都应该报告给您的安全团队以便推翻。