首页 > 解决方案 > SQL UPDATE 事件无法通过消息事件与 discord.js 一起正常工作

问题描述

在过去的几天里,我一直在尝试使用 mysql npm 包让 SQL UPDATE 事件与 discord.js 一起正常工作。所有登录详细信息和表、列名均正确。这意味着每次在 Discord 文本通道中发送消息时更新整数。

我已经尝试了多种类型的更新,即使没有一种已经成功。

查看这些日志截图: - https://faxes.zone/img/y4fx1.png(触发事件之前/之后) - https://faxes.zone/img/8610v.png(discord.js控制台当消息已发送)

bot.on("message", message => {
    if ( message.channel.type === 'dm' ) return;
    if (message.author.bot) return;
    if (message.content.startsWith(".")) return;

    connection.query(`SELECT * FROM logs WHERE id = '${message.author.id}'`, function (err, resultLogs) {
        if(err) throw err;
        let sql;

        if(resultLogs[0]) {
            console.log(resultLogs[0].msgcount)
            let newMessageCount = resultLogs[0].msgcount++;
            sql = `UPDATE logs SET msgcount = ${newMessageCount} WHERE id=${message.author.id}`
            connection.query(sql, console.log)
        }
    });  
});

每次发送消息时,预期的输出应该是整数加一。

标签: javascriptmysqlsqlnpmdiscord.js

解决方案


msgcount您可以使用 MySql 运算符递增。因此,您不需要进行选择查询。而且您还需要转义 sql 语句中的值以防止注入。

顺便说一句,我重构了你的代码。

bot.on('message', message => {
    if ( message.channel.type === 'dm' || message.author.bot || message.content.startsWith(".") ) return;

    connection.query('UPDATE logs SET msgcount = msgcount + 1 WHERE id = ?', [message.author.id], (error,  result) => {
      if (error) throw error;
      
      console.log(result);
    })
}


推荐阅读