准备好的声明没有问号占位符

时间:2015-09-01 17:00:41

标签: java jdbc

没有问号占位符的预备声明是否仍然安全?

示例:

String username = "userename from EditText";
String password = "password from EditText";

PreparedStatement statement = _con.prepareStatement("SELECT * FROM users WHERE username = '"+username+"' AND password = '"+password+"';");
ResultSet rs = statement.executeQuery();

2 个答案:

答案 0 :(得分:8)

不,它不安全(针对SQL注入)。这与使用Statement相同,但您没有任何改进。

答案 1 :(得分:2)

预备语句更安全的原因是用你的参数替换占位符的机制将安全地逃避它们(用安全的东西替换危险的东西)

使用预准备语句的全部原因是允许数据库对它们进行预处理,这意味着您应该只使用占位符执行一个预准备语句,然后使用不同的参数重用它以获得好处。