tutorial - Problemas de sintaxis de consultas mysql de Node.js ACTUALIZACIÓN DÓNDE
nodejs mysql npm (4)
Esto es lo que funcionó para mí.
var records =
[name,email,adhar,ROLE,NOTES,REQUESTFORSUPPLIER,PASSWORD,LOCATION,CREATEDBY,CREATEDON,MODIFIEDBY,MODIFIEDON,mobile];
var sql="UPDATE flavica_user SET Name=?,EMAIL=?,AADHAR=?,ROLE=?,NOTES=?,REQUESTFORSUPPLIER=?,PASSWORD=?,LOCATION=?,CREATEDBY=?,CREATEDON=?,MODIFIEDBY=?,MODIFIEDON=? WHERE USER_MOBILE=?"
//var sql="UPDATE `flavica_user` SET ? WHERE ?";
//this sql updates flavica_user
con.query(sql,records,(err,result)=>{
if(err){
res.json({
status:400,
message:err
})
}
else{
res.json({
status:200,
message:result
})
}
})
Intento actualizar alguna información en la base de datos MYSQL, pero no estoy seguro de cómo hacerlo en node.js. Este es el controlador mysql que estoy usando https://github.com/felixge/node-mysql
Lo que tengo hasta ahora
connection.query(''SELECT * FROM users WHERE UserID = ?'', [userId], function(err, results) {
if (results[0]) {
if (results[0].Name!=name) {
console.log(results[0].Name);
connection.query(''UPDATE users SET ? WHERE UserID = ?'', [userId], {Name: name});
}
console.log(results[0].UserID);
}
});
Todo funciona excepto ...
connection.query(''UPDATE users SET ? WHERE UserID = ?'', [userId], {Name: name});
En PHP tendría esto ...
mysql_query("UPDATE users SET Name=''".$_GET["name"]."'' WHERE UserID=''".$row[''UserID'']."''");
No estoy seguro de lo que estoy haciendo mal, pero estoy seguro de que el problema está aquí
connection.query(''UPDATE users SET ? WHERE UserID = ?'', [userId], {Name: name});
La respuesta de ruakh no es del todo correcta, puedes usar el SET ?
característica con otro ?
.
La sintaxis es:
connection.query(''UPDATE users SET ? WHERE UserID = ?'', [{ Name: name }, userId])
Puede utilizar una matriz de objetos:
connection.query(''UPDATE user SET ? WHERE ?'', [{ Name: name }, { UserId: userId }])
[ Nota (agregada 2016-04-29): Esta respuesta fue aceptada, pero resulta que hay una forma razonable de usar SET ?
. Para más detalles, vea la respuesta de Bala Clark en esta misma página. —Ruakh ]
Desde el código de Connection.prototype.query()
y Connection.createQuery()
, queda claro que solo se puede pasar en un solo objeto de valores. ¿No veo dónde está el código para el SET ?
especial SET ?
el comportamiento está definido, claramente no en SqlString.formatQuery()
, pero si usa SqlString.objectToValues()
, ¿entonces no hay manera de usarlo junto con otro ?
.
Creo que el mejor enfoque es simplemente prescindir del SET ?
limpio SET ?
característica, y escribir cualquiera de estos:
connection.query(''UPDATE users SET Name = ? WHERE UserID = ?'', [name, userId])
connection.query(''UPDATE users SET Name = :Name WHERE UserID = :UserID'',
{UserID: userId, Name: name})
Pero si realmente quieres usar SET ?
Supongo que podrías escribir esto:
connection.query(''UPDATE users SET ? WHERE UserID = :UserID'',
{UserID: userId, Name: name})
que actualizaría tanto UserID
como Name
; a menos que tenga un disparador, esto debería estar bien, ya que está actualizando UserID
al valor que ya tenía de todos modos. Pero es un poco desconcertante, y no lo recomiendo.