如何解决JSP中更新MySQL时出现的MySQLSyntaxErrorException异常?
解决MySQLSyntaxErrorException的问题
嘿,你的问题出在SQL语句的语法错误上,我帮你揪出两个明显的坑:
- 第一个错误:
password='"+password+"'后面缺少逗号,导致它和后面的email='"+email+"'连在了一起,MySQL根本无法解析这个混乱的语法结构。 - 第二个错误:
no_phone='"+no_phone+"',后面多了一个逗号,WHERE子句前面绝对不能有多余的逗号,这是写SQL时很容易犯的低级错误。
先给你修正语法后的Statement版本(仅临时修复,不推荐长期用)
int i = st.executeUpdate("UPDATE signup SET id_login='"+id_user+"',name_cust='"+name_cust+"', password='"+password+"', email='"+email+"',no_phone='"+no_phone+"' WHERE id_user='"+id_user+"'");
强烈建议改用PreparedStatement(重点!)
你当前用Statement拼接字符串的写法存在严重的SQL注入风险——比如如果用户输入的密码包含单引号(比如' OR 1=1 --),直接拼接会篡改你的SQL逻辑,轻则报错,重则导致数据泄露或被恶意修改。而且用PreparedStatement还能彻底避免这类拼接字符串的语法错误:
// 用占位符?代替直接拼接变量,结构更清晰 String sql = "UPDATE signup SET id_login=?, name_cust=?, password=?, email=?, no_phone=? WHERE id_user=?"; PreparedStatement pst = CON.prepareStatement(sql); // 按顺序给占位符赋值,索引从1开始 pst.setString(1, id_user); pst.setString(2, name_cust); pst.setString(3, password); pst.setString(4, email); pst.setString(5, no_phone); pst.setString(6, id_user); int i = pst.executeUpdate();
另外提个小疑问:你在SET里更新了id_login,但WHERE条件用的是id_user,如果id_user是表的主键,更新主键字段可能不是合理的业务逻辑,你可以检查下是不是字段名搞混了哦。
内容的提问来源于stack exchange,提问作者ray
相关产品推荐
相关产品推荐

