我有一些Node.js代码尝试更新数据库,如下所示:
connection.query(command, function(err,rows) {
if (err){
console.log(command);
console.log("ERROR");
console.log(err);
return;
}
console.log("good");
});
Run Code Online (Sandbox Code Playgroud)
以上针对"命令"的不同值重复运行,从而对数据库生成不同的查询.问题是,当出现错误时,错误的查询将被打印出来console.log(command).这是因为查询添加到队列的时间以及查询实际执行的时间不同,因此每次这些时间的"命令"值都不相同.有没有解决的办法?
注意:console.log(err)打印错误本身,也是查询的一部分,但它只打印发生错误的行.我想打印整个查询.
Sri*_*har 28
根据文档,您可以使用query.sql获取实际执行的查询.
var post = {id: 1, title: 'Hello MySQL'};
var query = connection.query('INSERT INTO posts SET ?', post, function(err, result) {
// Neat!
});
console.log(query.sql); // INSERT INTO posts SET `id` = 1, `title` = 'Hello MySQL'
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它将是
connection.query(command, function (err, rows) {
if (err) {
console.log('this.sql', this.sql); //command/query
console.log(command);
console.log("ERROR");
console.log(err);
return;
}
console.log("good");
});
Run Code Online (Sandbox Code Playgroud)
Yve*_* M. 13
如果@Sridhar 的回答对您不起作用,可能是因为您使用的是尚未返回 SQL 查询的promise API ,您可以使用:
const sql = connection.format("SELECT * FROM table WHERE foo = ?", ["bar"]);
console.log(sql);
const [rows] = await connection.query(sql);
Run Code Online (Sandbox Code Playgroud)
文档:https : //github.com/mysqljs/mysql#preparing-queries