Recibo este error mientras intento enviar una solicitud de colocación para actualizar una fila de una tabla de productos en mysql usando nodejs. Aquí está mi código:
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 }) } }) }mientras trato de enviar una solicitud usando el cartero, recibo este error:
ER_PARSE_ERROR: Tiene un error en su sintaxis SQL; consulte el manual que corresponde a la versión de su servidor MySQL para conocer la sintaxis correcta para usar cerca de ''productTitle=accha product' donde productId='19'' en la línea 1"
No estoy seguro de qué cliente sql está usando como connectDB , pero de acuerdo con esta página https://www.w3schools.com/sql/sql_update.asp , la sintaxis correcta es así (reemplace columnName con su propio nombre de columna)
UPDATE product SET columnName= ? WHERE productId = ?; Supongo que te falta la parte columnName= .
Como mencionó @ardritkrasniqi cuando agregué comillas dobles al req.body[e] en la línea cinco, ¡comenzó a funcionar!
Además, en lugar de usar el marcador de posición (?) para los datos, lo usé directamente en la consulta SQL usando literales de plantilla.
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 }) } }) }