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
相关产品推荐
相关产品推荐

