【发布时间】:2023-04-05 19:16:01
【问题描述】:
我是否遗漏了以下错误,以将以下内容插入到具有四列 message_id(自动递增)message_sender、message_reciever、message_body 的表中。我检查了类似的问题,但没有找到解决方案。 '''
<% String sender_id = request.getParameter("message_sender");
String reciever_id = request.getParameter("message_reciever");
String message = request.getParameter("message_body");
try{
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/fyp", "root", "Kmd116352323!");
Statement st = con.createStatement();
st.executeUpdate("INSERT INTO messages(message_sender,message_reciever,message_body) VALUES('"+sender_id+", "+reciever_id+" , "+message+" ')");
out.println("Your request has been noted."
+ " Please return to your user profile or log out");
} catch(Exception e){
out.println(e);
}
%>
【问题讨论】:
-
您使用了一个名为
receiver_id类型为String的变量,但该名称暗示了一个数字标识符...脱离上下文,但很有用:使用PreparedStatement以避免SQL 注入 -
请learn to properly use a PreparedStament。不要将用户输入连接到 SQL 字符串中。如果你这样做,你的问题很可能也会消失
-
与您的问题无关,但该代码不应位于 JSP 中,而应位于使用连接池的 servlet 中,而不是在表示层中硬编码连接字符串