【发布时间】:2021-09-17 06:42:41
【问题描述】:
我正在使用带有异步和等待的 NodeJS 的 MySQL。我正在尝试从插入的行中获取最后一个 insertid,但不断出现错误。
这里是异步函数;
function makeDb( config ) {
const connection = mysql.createConnection( config ); return {
query( sql, args ) {
return util.promisify( connection.query )
.call( connection, sql, args );
},
close() {
return util.promisify( connection.end ).call( connection );
}
};
}
这是查询失败的代码;
try {
if(tag1){
row_b = await db.query( "SELECT tagid FROM tags WHERE tagname = ?", [tag1]);
const onetagid1 = row_b[0].tagid;
console.log('onetagid1 = ' + onetagid1);
if (row_b > 0){
row_c = await db.query("
INSERT INTO entitytag (tagid1, audioid) VALUES (?,?)
ON DUPLICATE KEY UPDATE tagid1 = ?" [onetagid1, audioid, onetagid1]
);
} else {
row_d = await db.query( 'INSERT IGNORE INTO tags (tagname) VALUES (?)', [tag1]);
var twotagid1 = row_d.insertId;
console.log('twotagid1 2nd = ' + twotagid1);
row_e = await db.query(
"INSERT INTO entitytag (tagid1, audioid) VALUES (?,?)
ON DUPLICATE KEY UPDATE tagid1 = ?" [twotagid1, audioid, twotagid1]
);
}
res.json('json success!');
}
}
这是错误;
onetagid1 = 30
twotagid1 2nd = 0
ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'I' at line 1
错误是twotagid1 2nd = 0,不应为零。
【问题讨论】:
-
良好的代码缩进将帮助我们阅读代码,更重要的是它会帮助您调试代码Take a quick look at a coding standard 为您自己的利益。您可能会被要求在几周/几个月内修改此代码,最后您会感谢我的。
-
哪个行号出现错误,有 2 个 INSERTS
-
tags表是否有定义为 AUTO-INCREMENT 的列?? -
There are many packages 允许您将 MySQL 与 NodeJS 一起使用。您在项目中具体使用了哪些包(通过代码库中的
require())。如果您使用的是最流行的包mysqljs/mysql,它不支持您在示例中使用的async和await。但是,其他一些软件包可以。请提供其他人需要帮助您的所有必要详细信息。 -
现在您已经确认您正在使用
mysqljs/mysql包 - 我们可以自信地说它不包括对async和await的本机支持。因此,如果您提供的代码示例“有时在其他页面上工作”,那么您必须尝试通过您自己制作的模块或类来扩展或修改包,以便它支持async。是这样吗?如果是这样,您还需要分享这些详细信息,因为这可能是您的问题所在。在您精通包的核心特性和功能之前,您应该避免使抽象问题变得复杂。
标签: mysql node.js async-await sql-insert node-mysql