You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:31:06