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

SQLite3插入数据后this.lastID返回undefined,如何获取最后插入ID

问题原因与解决方案

核心原因

你使用了箭头函数作为db.run()的回调,这是导致this.lastID为undefined的直接原因:
sqlite3库的run方法设计为:当使用普通函数作为回调时,回调内部的this会指向本次SQL执行的语句实例,自带lastID(最后插入行的主键ID)、changes(本次操作影响的行数)两个属性。而箭头函数不会创建独立的this上下文,它的this继承自外层作用域,无法获取到sqlite3注入的语句实例属性。

修复方案

方案1:替换箭头函数为普通函数(推荐)

将回调替换为普通函数即可正常获取this.lastID,同时建议使用参数占位符优化插入逻辑,避免SQL注入风险与语法错误:

db.run(`INSERT INTO myTable (data1, data2) VALUES (?, ?)`, [aa, bb], function(err) {
    if (err) {
        console.log(err)
        return
    }
    console.log('最后插入的ID:', this.lastID)
})

方案2:单独查询最后插入ID

如果你不想修改回调的函数写法,也可以通过SQL内置函数last_insert_rowid()查询:

db.serialize(() => {
    db.run(`INSERT INTO myTable (data1, data2) VALUES (?, ?)`, [aa, bb], (err) => {
        if (err) return console.log(err)
    })
    db.get(`SELECT last_insert_rowid() as lastID`, (err, row) => {
        if (err) return console.log(err)
        console.log('最后插入的ID:', row.lastID)
    })
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:36:03