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

NodeJS+ExpressJS+MySQL单用户更新数据时SQL语法错误求助

问题:修改用户信息时SQL语法错误

我尝试创建一个允许用户修改姓名和密码的表单,却遇到了SQL语法错误。以下是我的代码及报错信息:

// Multiple '?' not working, SQL syntax error
db.query('UPDATE users SET name = ?, password = ? WHERE email = ?', { name: newName, password: hashedNewPassword, email: email }, (error, results) => {
   console.log(results);
   if(error) {
      console.log(error);
   } else {
      res.status(200).redirect("/");
   }
})

报错信息:

code: 'ER_PARSE_ERROR',
errno: 1064,
sqlMessage: "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '? WHERE email= ?' at line 1"

问题原因及解决方案

问题出在参数传递格式不匹配:当SQL语句使用?作为占位符时,db.query要求参数必须是数组格式,而你传了一个键值对对象。对象参数只适用于命名占位符(如:name),和?占位符不兼容,这才触发了语法解析错误。

修复方案1:改用数组传递参数

db.query('UPDATE users SET name = ?, password = ? WHERE email = ?', [newName, hashedNewPassword, email], (error, results) => {
   console.log(results);
   if(error) {
      console.log(error);
   } else {
      res.status(200).redirect("/");
   }
})

修复方案2:改用命名占位符配合对象参数

如果你更习惯用对象传参,可以把SQL里的?换成命名占位符:

db.query('UPDATE users SET name = :name, password = :password WHERE email = :email', { name: newName, password: hashedNewPassword, email: email }, (error, results) => {
   console.log(results);
   if(error) {
      console.log(error);
   } else {
      res.status(200).redirect("/");
   }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 12:15:58