mysql - 如何使用 npm mysql 将表达式与批量插入结合使用?

标签 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 是一个由数组填充的 ?,因此我无法轻松地注入(inject)表达式。有什么想法吗?

最佳答案

基本上这似乎是不可能的,所以你应该做一个你想要的查询字符串。

我会尝试如下。

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

希望对您有所帮助。

关于mysql - 如何使用 npm mysql 将表达式与批量插入结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43481075/

相关文章:

javascript - Node Js Cli 与 mongoDB

node.js - `npm` busted - 如何克服模块未找到、意外 token 错误

php - 遇到以下 SMTP 错误 : 0 Unable to send email using PHP SMTP

java - 带有智能卡 + 本地应用程序进行身份验证的 PHP 站点

mysql - 使用 MySQL 查询以秒为单位增加日期/时间值

javascript - 通过 Stripe 向用户收费并将资金存入另一个用户帐户

node.js - 如何在 NodeJS 中查找 EHOSTUNREACH 的原因?

php - mysql - 更改时区不起作用

mysql - 由字母和数字组成且递增的 ID 号应使用什么类型

node.js - 开 Jest : child_process. exec.mockImplementation 不是一个函数