Problèmes de syntaxe de requête mysql avec Node.js UPDATE WHERE

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 }) } })