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

MySQL数据更新失败(错误码:ER_PARSE_ERROR)求助

解决编辑个人资料功能的SQL及代码问题

核心错误:SQL UPDATE语法错误

你收到的ER_PARSE_ERROR是因为UPDATE语句用了错误的语法,MySQL的UPDATE不支持SET (列名) VALUES (值)这种写法(这是INSERT的专属语法)。同时你的UPDATE语句缺少WHERE条件,这会导致全表用户数据被批量修改,属于严重的安全漏洞。

修正后的SQL语句

替换为MySQL支持的UPDATE格式,同时添加WHERE条件锁定目标用户:

UPDATE users SET `name` = ?, `surname` = ?, `headline` = ? WHERE id = ?

修正API控制器代码

去掉多余的SELECT查询(直接执行UPDATE即可),同时修正SQL逻辑并处理用户不存在的场景:

export const editUser = (req, res) => {
  const q = "UPDATE users SET `name` = ?, `surname` = ?, `headline` = ? WHERE id = ?";
  const userId = req.params.userId;
  const values = [req.body.name, req.body.surname, req.body.headline, userId];

  db.query(q, values, (err, data) => {
    if (err) return res.status(500).json(err);
    // 判断是否有行被修改,处理用户不存在的情况
    if (data.affectedRows === 0) {
      return res.status(404).json("User not found");
    }
    return res.status(200).json("User has been updated.");
  });
};

修正客户端HTML的字段名错误

你在姓氏输入框的name属性拼写错误(写成了surename),但前端state和后端接收的字段是surname,这会导致后端无法正确获取姓氏数据。修正该属性:

<div>
  <p>Surname:</p>
  <input
    type="text"
    placeholder={error ? "Something Went wrong" : isLoading ? "Loading" : data.surname}
    name="surname" <!-- 此处修正拼写错误 -->
    onChange={handleChange}
  />
</div>

可选优化建议

  • 遵循REST规范,将路由方法从POST改为PUT(修改资源用PUT,创建资源用POST):
    router.put("/edit-profile/:userId", editUser);
    
    同时客户端请求改为axios.put。
  • 添加参数校验逻辑,确保name、surname等字段不为空,避免无效数据写入数据库。

完成以上修改后,用Insomnia重新发送请求即可正常更新指定用户的个人资料。

内容的提问来源于stack exchange,提问作者Tadashi Haneda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 04:02:17