这个问题回答了我正在寻找的99%... How do I do a bulk insert in mySQL using node.js
var sql = "INSERT INTO Test (name, email, n) VALUES ?";
var values = [
['demian', 'demian@gmail.com', 1],
['john', 'john@gmail.com', 2],
['mark', 'mark@gmail.com', 3],
['pete', 'pete@gmail.com', 4]
];
conn.query(sql, [values], function(err) {
if (err) throw err;
conn.end();
});
如果我想传递一个表达式,例如NOW()
,我该怎么做?如果我在数组中传递它,它将被视为一个字符串。由于VALUES
是由数组填充的?
,因此我无法轻松注入表达式。有什么想法吗?
答案 0 :(得分:1)
基本上似乎不可能,所以你应该创建一个你想要的查询字符串。
我会尝试如下。
var sql = "INSERT INTO Test (name, email, n, modified_on) VALUES ?";
var values = [
['demian', 'demian@gmail.com', 1, '::NOW()'],
['john', 'john@gmail.com', 2, '::UNIX_TIMESTAMP()'],
['mark', 'mark@gmail.com', 3, '::DATE()'],
['pete', 'pete@gmail.com', 4, '::NOW()']
];
var formattedQuery = connection.format(sql, [values]).replace(/'::(.*?)'/g, '$1');
connection.query(formattedQuery, function(err) {
});
fomattedQuery
如下。
INSERT INTO Test (name, email, n, modified_on) VALUES ('demian', 'demian@gmail.com', 1, NOW()), ('john', 'john@gmail.com', 2, UNIX_TIMESTAMP()), ('mark', 'mark@gmail.com', 3, DATE()), ('pete', 'pete@gmail.com', 4, NOW())
我希望这会有所帮助。