【发布时间】:2012-12-16 06:18:49
【问题描述】:
为了防止 sql 注入,我试图避免使用 WHERE Surname LIKE '"search_txt.getText()"' ...但是使用 preparedStatement 会离开 ?空白,换句话说,即使在文本字段中输入了正确的搜索值,sql语句也无法执行...pst1.setString(1, search_txt.getText()+"%");行中的问题是什么
private void SearchActionPerformed(java.awt.event.ActionEvent evt) {
try{
sql = "SELECT Title, Forename, Surname, Role FROM AcademicInfo WHERE Surname LIKE ? OR Forename LIKE ?";
PreparedStatement pst1 = conn.prepareStatement(sql);
ResultSet rs2 = pst1.executeQuery();
if (rs2.next()) {
pst1.setString(1, search_txt.getText()+"%");
pst1.setString(2, search_txt.getText()+"%");
System.out.println(sql);
JOptionPane.showMessageDialog(null, "Found Academic");
Update_table(sql);
} else {
System.out.println(sql);
JOptionPane.showMessageDialog(null, "No Results Found");
}
}
catch(Exception e) {
JOptionPane.showMessageDialog(null, e);
}
}
【问题讨论】:
-
欢迎 SQL 注入攻击。使用准备好的语句而不是自己弄乱字符串!
-
@Anony-Mousse 我知道,这只是一个想法。
-
其他人可能会偶然发现这个问题,然后认为这是正确的做法。最好避免在任何地方发布的每个代码 sn-p 中都出现这种错误,这样人们就不会在没有解释为什么不好以及如何做得更好的情况下看到不好的代码。
-
@Anony-Mousse 已编辑但新问题