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
问题原因及解决方案
问题出在参数传递格式不匹配:当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
相关产品推荐
相关产品推荐

