Node.js mysql查询语法问题UPDATE WHERE

我试图更新MYSQL数据库中的一些信息,但我不知道如何在node.js中做到这一点。 这是我使用的MySQL驱动程序https://github.com/felixge/node-mysql

我到目前为止

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

一切正常,除了…

 connection.query('UPDATE users SET ? WHERE UserID = ?', [userId], {Name: name}); 

在PHP中,我会有这个…

 mysql_query("UPDATE users SET Name='".$_GET["name"]."' WHERE UserID='".$row['UserID']."'"); 

我不知道我在做什么错,但我确信这个问题在这里

 connection.query('UPDATE users SET ? WHERE UserID = ?', [userId], {Name: name}); 

[ 注意(补充2016-04-29):这个答案被接受了,但是事实certificate有一个合理的方法来使用SET ? 。 有关详细信息,请参见Bala Clark在同一页面上的回答。 -ruakh ]


Connection.prototype.query()Connection.createQuery()的代码中 ,显然你只能传入一个值对象。 我没有看到特殊SET ?的代码在哪里SET ? 行为是定义的 – 这显然不是在SqlString.formatQuery() – 但如果它使用SqlString.objectToValues() ,那么我想没有办法与另一个一起使用它?

我认为最好的办法是放弃整齐的SET ? function,并写下这些:

 connection.query('UPDATE users SET Name = ? WHERE UserID = ?', [name, userId]) 
 connection.query('UPDATE users SET Name = :Name WHERE UserID = :UserID', {UserID: userId, Name: name}) 

但如果你真的想使用SET ? ,我想你可以这样写:

 connection.query('UPDATE users SET ? WHERE UserID = :UserID', {UserID: userId, Name: name}) 

这将更新UserIDName ; 除非你有触发器,否则这应该是正确的,因为它将UserID更新为它已有的值。 但是这有点令人不安,我不推荐它。

卢哈的答案不完全正确,你可以使用SET ? function与另一个?

语法是:

 connection.query('UPDATE users SET ? WHERE UserID = ?', [{ Name: name }, userId]) 

您可以使用一组对象:

 connection.query('UPDATE user SET ? WHERE ?', [{ Name: name }, { UserId: userId }])