J'essaie de mettre à jour certaines informations dans MYSQL DB, mais je ne suis pas sûr de savoir comment le faire dans node.js. C'est le pilote mysql que j'utilise https://github.com/felixge/node-mysql
Ce que j'ai jusqu'à présent
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);
}
});
Tout fonctionne sauf ...
connection.query('UPDATE users SET ? WHERE UserID = ?', [userId], {Name: name});
Dans PHP, j'aurais ceci ...
mysql_query("UPDATE users SET Name='".$_GET["name"]."' WHERE UserID='".$row['UserID']."'");
Je ne suis pas sûr de ce que je fais mal, mais je suis convaincu que le problème est là
connection.query('UPDATE users SET ? WHERE UserID = ?', [userId], {Name: name});
[Note (ajouté le 2016-04-29): Cette réponse a été acceptée, mais il s'est avéré qu'il y avait est un moyen raisonnable d'utiliser SET ?
. Pour plus de détails, voir la réponse de Bala Clark sur cette même page. —Ruakh]
De le code pour Connection.prototype.query()
et Connection.createQuery()
, il est clair que vous ne pouvez transmettre qu’un objet uniquevaleurs. Je ne vois pas où le code pour le comportement spécial SET ?
est défini - ce n'est clairement pas dans SqlString.formatQuery()
- mais s'il utilise SqlString.objectToValues()
, alors je suppose qu'il n'y a aucun moyen de l'utiliser avec un autre ?
.
Je pense que la meilleure approche consiste simplement à se passer de la fonctionnalité soignée SET ?
et à écrire l'une de ces choses:
connection.query('UPDATE users SET Name = ? WHERE UserID = ?', [name, userId])
connection.query('UPDATE users SET Name = :Name WHERE UserID = :UserID',
{UserID: userId, Name: name})
mais si vous voulez vraiment utiliser SET ?
, je suppose que vous pourriez écrire ceci:
connection.query('UPDATE users SET ? WHERE UserID = :UserID',
{UserID: userId, Name: name})
qui mettrait à jour à la fois UserID
et Name
; sauf si vous avez un déclencheur, ceci devrait _ être O.K., en ce sens qu'il met à jour UserID
à la valeur qu'il avait déjà de toute façon. Mais c'est un peu déconcertant, et je ne le recommande pas.
La réponse de ruakh n'est pas tout à fait correcte, vous pouvez utiliser la fonctionnalité SET ?
avec un autre ?
.
La syntaxe est la suivante:
connection.query('UPDATE users SET ? WHERE UserID = ?', [{ Name: name }, userId])
Vous pouvez utiliser un tableau d'objets:
connection.query('UPDATE user SET ? WHERE ?', [{ Name: name }, { UserId: userId }])
C'est ce qui a fonctionné pour moi
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
})
}
})