【问题标题】:Is it possible to make unified insert function是否可以做统一的插入功能
【发布时间】:2026-02-11 07:40:01
【问题描述】:

所以我有这段代码,但在我实际使用它之前,我不知道该函数将接受多少个参数

function insert(...args) {
    return new Promise((resolve, reject) => {
        //                               ↓↓↓ - here is the problem
        db.query('INSERT INTO `?` VALUES(?,?,?,?,?,?);', args, (err, rows) => {
            return err ? reject(err) : resolve(rows);
        });
    });
}

是否可以修改此函数,以便我可以根据需要插入尽可能多的参数?

【问题讨论】:

  • 编写自己的查询生成器可能很乏味且容易出错。相反,请考虑使用现有的生成器,knex.js 只是一个示例。

标签: node.js node-mysql


【解决方案1】:

最简单的解决方案可能是,使用args.length 生成适当数量的?

function insert(...args) {
    return new Promise((resolve, reject) => {
        let qm = Array(args.length-1).fill('?', 0).join(',');
        let query = `INSERT INTO \`?\` VALUES(${qm});`
        db.query(query, args, (err, rows) => {
            return err ? reject(err) : resolve(rows);
        });
    });
}

但是您可能应该坚持 Wiktor Zychla 的建议,并且不要尝试编写自己的查询生成器。特别是 - 无意冒犯 - 如果您需要在该级别提出问题......

【讨论】:

  • 值仍然从 args 进入 SQL 语句
  • @AliHabibzadeh 是的,但是它们被 mysql 模块正确转义,从而防止 sql 注入。这就是使用准备好的语句的全部意义
最近更新 更多