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

How do I make an update with an array in 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) {
});

我在插入时使用了类似的语法(使用数组),而且效果很好。

所以这样做有什么问题,为了更新? 当我执行这个时,我得到一个语法错误:(

我应该以其他方式进行吗?

正如您所说,它适用于 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 连接。