在nodejs中尝试向mysql发出put请求时出错



我得到这个错误,而我试图发送一个放请求更新一行的产品表在mysql使用nodejs。下面是我的代码:

exports.updateProduct=(req,res)=>{
const productId=req.params.productId;
const keys=Object.keys(req.body);
const data=keys.map(e=>{
const value=e+'='+req.body[e];
return value
})

const sql='update product set ? where productId=?';
connectDB.query(sql,[data,productId],(err,result)=>{
if(err){
res.status(400).json({
status:'failed',
message:err.message
})
}
else{
res.status(200).json({
status:'success',
message:result
})
}
})
}

当我尝试使用邮差发送请求时,我得到这个错误:

ER_PARSE_ERROR:你的SQL语法有错误;检查手册对应于MySQL服务器版本的正确语法在"productTitle=accha product"附近使用,其中productId="19"1">

我不确定您使用的是什么sql客户端作为connectDB,但根据此页面https://www.w3schools.com/sql/sql_update.asp,正确的语法是这样的(用您自己的列名替换columnName)

UPDATE product
SET columnName= ?
WHERE productId = ?;

我猜你漏掉了columnName=部分。

正如@ardritkrasniqi所提到的,当我在第五行向req.body[e]添加双引号时,它开始工作了!
也不是使用占位符(?)的数据,我使用它直接在SQL查询中使用模板字面量。

exports.updateProduct = (req, res) => {
const productId = req.params.productId;
const keys = Object.keys(req.body);
const data = keys.map(e => {
const value = e + '=' + '"' + req.body[e] + '"';
return value
})
const sql = `update product set ${data} where productId=?`;
connectDB.query(sql, [productId], (err, result) => {
if (err) {
res.status(400).json({
status: 'failed',
message: err.message
})
} else {
res.status(200).json({
status: 'success',
message: result
})
}
})
}

最新更新