我正在使用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) {
});
我在插入时使用类似的语法(使用数组),并且工作正常。
这样做有什么问题,对于更新? 当我执行此操作时,出现语法错误:(
我应该以其他方式这样做吗?
答案 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。