如何解决如何显示正确的值?不和谐.js
我正在尝试使用 MysqL 制作货币系统。所以,我遇到的问题是当用户输入 ?add(添加货币)然后 ?bal(获取用户的余额)时一切正常,但如果用户输入 ?bal,机器人将显示前一个用户的余额:
预期输出
User1: ?add
Bot: Now you have 10 money!
User1: ?bal
Bot: You have 10 money!
User2: ?bal
Bot: You have 20 money!
实际输出
User1: ?add
Bot: Now you have 10 money!
User1: ?bal
Bot: You have 10 money!
User2: ?bal
Bot: You have 10 money! //which is User1's bal
奇怪的是,在数据库中的值很好(例如:User1 - 10; User2 - 20) 下面是代码
if(command == "add"){
con.query(`SELECT * FROM money WHERE id = '${msg.author.id}'`,(err,rows) => {
if (err) throw err;
if(rows.length < 1){
sql = `INSERT INTO money (id,money) VALUES ('${msg.author.id}','${add}')`
}else{
let money = rows[0].money;
sql = `UPDATE money SET money = ${money + add} WHERE id = '${msg.author.id}' `
msg.channel.send(`Now you have ${money} money!`)
}
con.query(sql,console.log)
})
}
if(command == "bal"){
con.query(`SELECT * FROM money WHERE id = '${msg.author.id}'`,(err) => {
if (err) throw err;
msg.channel.send(`You have ${money} money!`)
})
}
解决方法
您需要先结束连接,然后再开始另一个连接,否则它只会查询相同的内容。
if(command == "add") {
con.start() // I am not sure of the syntax for starting a connection,but this is an assumption
con.query(`SELECT * FROM money WHERE id = '${msg.author.id}'`,(err,rows) => {
if (err) throw err;
if(rows.length < 1) {
sql = `INSERT INTO money (id,money) VALUES ('${msg.author.id}','${add}')`
}else{
let money = rows[0].money;
sql = `UPDATE money SET money = ${money + add} WHERE id = '${msg.author.id}' `
msg.channel.send(`Now you have ${money} money!`)
}
con.query(sql,console.log)
con.end(); // these are important,because they close the connection
})
}
if(command == "bal") {
con.start()
con.query(`SELECT * FROM money WHERE id = '${msg.author.id}'`,(err) => {
if (err) throw err;
msg.channel.send(`You have ${money} money!`)
con.end();
})
}
我不确定用于启动查询的语法的性质,但我在网上发现使用了 <connection>.end()
我从未使用过 MySQL 并且我个人使用过 better-sqlite3
,因为它快了 40 倍,但我认为这是您做错的地方。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。