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
相关产品推荐
相关产品推荐

