2013-02-21 97 views
16

我试图更新MYSQL数据库中的某些信息,但我不确定如何在node.js中执行此操作。这是我使用https://github.com/felixge/node-mysqlNode.js mysql查询语法问题UPDATE WHERE

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

回答

35

[注(加2016年4月29日):这个答案已被接受,但事实证明,有使用SET ?一种合理的方式。有关详细信息,请参见Bala Clark在同一页面上的回答。 — ruakh]


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

我认为最好的办法是只需用利落SET ?功能分配,并写任一:

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;除非你有触发器,这个应该是是O.K.,因为它将UserID更新为它已有的值。但这有点令人不安,我不推荐它。

+0

似乎工作:d谢谢! – agdurrette 2013-02-23 00:50:14

+0

@MarcioJasinski:感谢您的编辑建议,但它确实会改变这个答案,使其他页面上的答案失效。我会看看我是否可以找到更优雅的方式来添加这些信息。 。 。 – ruakh 2016-04-29 16:57:29

+0

你应该提到,为了让你的':Name'和':UserId'实现工作,需要包含一个[自定义格式](https://github.com/mysqljs/mysql#custom-format)配置。 – Knowledge 2018-01-20 19:06:50

15

由ruakh的答案并不完全正确,您可以使用SET ?功能与另一?

的语法是:

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

我认为你的语法必须有一个错误:在你的版本中,'SET?'怎么知道被设置的字段是'Name'? – ruakh 2013-10-14 15:22:56

11

您可以使用对象的数组:

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

谢谢@marcel我试过了 – AnNaMaLaI 2014-07-08 09:56:25