0

爪哇:

PreparedStatement stmt = myConnection.prepareStatement("CALL myStoredRoutine(?, ?, ?)");
stmt.setString(1, a);
stmt.setString(2, b);
stmt.setString(3, c);
stmt.executeQuery();

如果我存储的例程在 MySQL 中,未过滤的字符串是否可以将某些内容注入我的代码中?

4

4 回答 4

2

不,因为PreparedStatement是为了防止SQL Injection.

我看到您正在调用存储过程,因此更好地使用CallableStatement.

String SQL = "{CALL myStoredRoutine(?, ?, ?)}";
CallableStatement cstmt = myConnection.prepareCall(SQL);
  • 准备好的声明

PreparedStatement 的实例包含已编译的 SQL 语句。这就是使声明“准备好”的原因

因为 PreparedStatement 对象是预编译的,所以它们的执行速度可以比 Statement 对象快。

准备好的语句用于执行sql查询

  • 可调用语句

CallableStatement 对象提供了一种以标准方式为所有 RDBMS 调用存储过程的方法。存储过程存储在数据库中;对存储过程的调用是 CallableStatement 对象包含的内容。

于 2012-10-21T17:50:04.807 回答
1

不,这是不可能的。字符串准备好的语句过滤。实际上,这是他们的观点之一。

于 2012-10-21T17:40:25.080 回答
0

不,参数绑定的目的是参数被解析为参数。这对性能也有好处。

于 2012-10-21T17:41:42.470 回答
0

当您使用参数化查询时,如果需要,参数会被解析并使用转义字符进行转换,因此不可能。这是使用参数化查询/准备语句的优势。

于 2012-10-21T17:42:08.830 回答