【发布时间】:2015-07-09 11:20:54
【问题描述】:
我正在使用 Java Servlet 连接数据并将数据插入到我的 MYSQL 数据库中。我目前正在使用以下准备好的语句:
String query1 = "SELECT * FROM `user` WHERE `username` = ?;";
PreparedStatement stat1 = connection.prepareStatement(query1);
stat1.setString(1, username);
ResultSet result = stat1.executeQuery();
out.println("<h1> PREPARED STATEMENT WORKING </h1>");
使用这个,h1 标题不会显示。
但是,我已经得到了这个工作:
String query1 = "SELECT * FROM `user` WHERE `username` = \"" + username + "\";";
PreparedStatement stat1 = connection.prepareStatement(query1);
ResultSet result = stat1.executeQuery();
out.println("<h1> PREPARED STATEMENT WORKING </h1>");
使用此方法,将显示 h1 标头。我的问题是,我设法让工作变得不那么安全的方式吗?如果是这样,我怎样才能让第一种方法起作用?
【问题讨论】:
-
第一个 sn-p 会发生什么?你有例外吗?
-
没有看到异常,不知道第一个有什么问题。第二个肯定是不安全的。不要使用它,否则有人可能会在您的网站上使用“joe”之类的用户名注册给您带来很多麻烦;drop table user'
-
也许只是我更习惯于 Oracle 风格,但我通常不会为表名或列名使用引号,而不是分号......也许你应该试一试。
-
@Mureinik 当它运行时,它显示一个空白网页,没有异常显示。如果有任何区别,则将从 html 表单中检索变量“用户名”。
标签: java mysql servlets prepared-statement