我正在使用 Nodejs 对数据库进行简单的 UPDATE SQL 查询,如下所示:
conn.query("UPDATE room SET `join_id`=? WHERE `id`=?", [join, cfid], function (e, r) {
console.log(e, r);
//e null; r object;
});
查询的响应r
返回以下内容:
OkPacket {
fieldCount: 0,
affectedRows: 1,
insertId: 0,
serverStatus: 34,
warningCount: 0,
message: '(Rows matched: 1 Changed: 1 Warnings: 0',
protocol41: true,
changedRows: 1
}
但是在 OKPacket
响应之后,我发现数据库没有任何变化,因此我的其余代码出现故障。我花了几个小时研究这个问题,发现两年前的一个问题尚未得出结论:here
最佳答案
我的猜测是您已关闭自动提交,可能是在 MySQL 服务器的 my.cnf 文件中或其他方式中。要进行检查,请按照以下方式运行代码:
let sql = "SHOW GLOBAL variables LIKE 'autocommit'";
connection.query(sql, function(err, result) {
console.log(result, 'global');
});
let sql2 = "SHOW variables LIKE 'autocommit'";
connection.query(sql2, function(err, result) {
console.log(result, 'local');
});
你的控制台应该输出
[ RowDataPacket { Variable_name: 'autocommit', Value: 'ON' } ] 'global'
[ RowDataPacket { Variable_name: 'autocommit', Value: 'ON' } ] 'local'
但是如果自动提交处于“关闭”状态,您就有答案了。
关于mysql - 更新 SQL 查询返回误导性响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40750139/