2013-02-21 100 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