node.js& mysql - 如何获取最后插入的ID?

时间:2016-07-04 14:00:18

标签: javascript mysql node.js lastinsertid

db.query("INSERT INTO `chat_entries`(`author`, `authorRank`, `receiver`, `timestamp`, `message`) VALUES (" + db.escape(GetUsername(connection)) + ", " + GetUserData(GetUsername(connection), "rank") + ", '-', " + Math.round(new Date().getTime() / 1000) + ", '" + db.escape(messageData.message) + "')", function(result, rows){
    console.log(result.insertId);
});

控制台告诉我:

  

无法读取null

的属性“insertId”

在我搜索解决方案后,我找到了这个页面: https://github.com/mysqljs/mysql#getting-the-id-of-an-inserted-row

根据此文档,它必须工作。 哪里是我的错? 提前谢谢。

3 个答案:

答案 0 :(得分:1)

你需要替换

console.log(result.insertId); 

console.log(rows.insertId);

因为它是您传递给回调函数的varibale。

答案 1 :(得分:0)

你的回调参数是错误的。试试这个:

db.query("INSERT INTO `chat_entries`(`author`, `authorRank`, `receiver`, `timestamp`, `message`) VALUES (" + db.escape(GetUsername(connection)) + ", " + GetUserData(GetUsername(connection), "rank") + ", '-', " + Math.round(new Date().getTime() / 1000) + ", '" + db.escape(messageData.message) + "')", function (err, result) {
    console.log(result.insertId);
});

答案 2 :(得分:0)

根据文档,回调的第一个参数是错误,第二个参数是结果。

您可能还希望为这些动态值使用占位符,而不是将它们连接起来。

此外,在使用db.escape()时不要硬编码单引号。

db.query("INSERT INTO table (`field1`, `field2`)
          VALUES ('Hello', " + db.escape("There") + ")",
         function(error, result) { });