如何使用npm mysql的批量插入表达式?

时间:2017-04-18 19:55:33

标签: mysql node.js

这个问题回答了我正在寻找的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是由数组填充的?,因此我无法轻松注入表达式。有什么想法吗?

1 个答案:

答案 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())

我希望这会有所帮助。