J’essaie de mettre à jour des 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});
En 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é 2016-04-29): Cette réponse a été acceptée, mais il s’avère qu’il existe un moyen raisonnable d’utiliser SET ?
. Pour plus de détails, voir la réponse de Bala Clark sur cette même page. —Ruakh ]
D’après le code de Connection.prototype.query()
et Connection.createQuery()
, il est clair que vous ne pouvez transmettre qu’un seul object de valeurs. Je ne vois pas où est le code pour le SET ?
spécial SET ?
le comportement est défini – ce n’est clairement pas dans SqlSsortingng.formatQuery()
– mais s’il utilise SqlSsortingng.objectToValues()
, alors je suppose qu’il n’y a aucun moyen de l’utiliser conjointement avec un autre ?
.
Je pense que la meilleure approche consiste simplement à se passer du SET ?
soigné SET ?
et écrivez 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
; à moins que vous n’ayez un déclencheur, cela devrait être OK, dans la mesure où il met à jour l’ 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 le SET ?
fonctionnalité avec un autre ?
.
La syntaxe est la suivante:
connection.query('UPDATE users SET ? WHERE UserID = ?', [{ Name: name }, userId])
Vous pouvez utiliser un tableau d’objects:
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 }) } })