如何使用node-mysql中的数组进行更新

时间:2015-12-09 22:09:27

标签: mysql node.js node-mysql

我正在使用nodejs-mysql,试图一次更新一堆行。

所以,我尝试了以下代码,运气不佳:

var sql = "UPDATE users SET Gender=?, Super=? WHERE Name=?";
var valueArray = [];
for (var idx = 0; idx < data.length; idx++) {
    var char = data[idx];
    valueArray.push([char[4], char[5], char[1]]);
}

connection.query(sql, [valueArray], function(err, rows) {
});

我在插入时使用类似的语法(使用数组),并且工作正常。

这样做有什么问题,对于更新? 当我执行此操作时,出现语法错误:(

我应该以其他方式这样做吗?

1 个答案:

答案 0 :(得分:2)

正如你所说它适用于INSERT。 node-mysql库将INSERT语句与您描述的嵌套数组转换为一个语句,例如:

var valueArray = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']];
var sql = "INSERT INTO users SET Gender=?, Super=? WHERE Name=?";
connection.query(sql, valueArray, function(err, rows) {
    // do something...
});

转换为:

INSERT INTO users
    (Gender, Super, Name)
VALUES
    ('a', 'b', 'c'),
    ('d', 'e', 'f'),
    ('g', 'h', 'i');

然而,在一个语句中更新多个实体在sql中并不那么容易。 您可以在循环中查询每个条目的数据库,也可以构造一个大的语句,例如:

var valueArray = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'];
var sql = "UPDATE users SET Gender=?, Super=? WHERE Name = ?;"
        + "UPDATE users SET Gender=?, Super=? WHERE Name = ?;"
        + "UPDATE users SET Gender=?, Super=? WHERE Name = ?;"

在这种情况下,您需要在您的连接中允许multiple statements