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

Posted

技术标签:

【中文标题】node.js & mysql - 如何获取最后插入的 ID?【英文标题】:node.js & mysql - How to get the last inserted ID? 【发布时间】:2016-07-04 14:00:17 【问题描述】:
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

根据本文档,它必须有效。 我的错在哪里? 提前致谢。

【问题讨论】:

你有自增列吗? 你应该有一个错误优先回调 【参考方案1】:

你需要更换

console.log(result.insertId); 

console.log(rows.insertId);

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

【讨论】:

【参考方案2】:

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

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);
);

【讨论】:

有了这个参数,我得到了同样的信息。 如果只记录result 对象会得到什么?【参考方案3】:

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

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

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

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

【讨论】:

愿意分享文档链接吗?

以上是关于node.js & mysql - 如何获取最后插入的 ID?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 node.js、socket.io 和 mysql 显示实时数据?

node.js + MySQL & JSON-result - 回调问题 & 对客户端无响应

node.js mysql 池 beginTransaction & 连接

Node.js & MySQL - 错误:1251 - 客户端不支持服务器请求的身份验证协议;考虑升级 MySQL 客户端

Node.js + MySQL 实现数据的增删改查

Node.js和mybatis分别实现mysql中like变量模糊查询