You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用mysql2模块获取INSERT INTO操作插入的行数据及自增ID?

在mysql2中获取INSERT操作的自增ID与插入行数据

首先,你看到的hola[object Object]是因为直接把对象和字符串拼接导致的,改成console.log('hola', results)或者console.log('hola', JSON.stringify(results))就能看到results的实际结构了。

获取自增ID

mysql2执行INSERT后返回的results对象里自带insertId属性,直接就能拿到该行的自增主键:

console.log('插入的自增ID:', results.insertId);

先修复SQL注入风险

你当前用字符串拼接生成SQL的写法有严重的SQL注入漏洞,必须改成参数化查询:

const queryFirstTable = 'INSERT INTO devicesdb.devices (token) VALUES (?)';
pool.execute(queryFirstTable, [req.body.token], (err, results) => {
  // ...后续逻辑
});

用?作为占位符,把参数放在数组里传入,mysql2会自动处理转义,杜绝注入风险。

获取完整插入行数据

INSERT操作本身不会返回完整的行数据,只能拿到操作状态和自增ID。如果需要完整行,得在插入后立即执行SELECT查询:

回调风格示例

router.post('/devices', (req, res) => {
  const insertQuery = 'INSERT INTO devicesdb.devices (token) VALUES (?)';
  pool.execute(insertQuery, [req.body.token], (err, insertResults) => {
    if (err) {
      console.error(err);
      return res.status(500).send('插入失败');
    }

    const insertedId = insertResults.insertId;
    // 查询刚插入的行
    const selectQuery = 'SELECT * FROM devicesdb.devices WHERE id = ?';
    pool.execute(selectQuery, [insertedId], (selectErr, selectResults) => {
      if (selectErr) {
        console.error(selectErr);
        return res.status(500).send('查询插入数据失败');
      }

      const insertedRow = selectResults[0];
      console.log('插入的完整行:', insertedRow);
      res.json({ message: '插入成功', data: insertedRow });
    });
  });
});

async/await风格(更简洁)

如果你的项目支持async/await,可以用Promise风格减少回调嵌套:

router.post('/devices', async (req, res) => {
  try {
    // 执行插入
    const [insertResults] = await pool.execute('INSERT INTO devicesdb.devices (token) VALUES (?)', [req.body.token]);
    const insertedId = insertResults.insertId;

    // 查询完整行
    const [selectResults] = await pool.execute('SELECT * FROM devicesdb.devices WHERE id = ?', [insertedId]);
    const insertedRow = selectResults[0];

    console.log('插入的完整行:', insertedRow);
    res.json({ message: '插入成功', data: insertedRow });
  } catch (err) {
    console.error(err);
    res.status(500).send('操作失败');
  }
});

内容的提问来源于stack exchange,提问作者Aleix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 12:57:23