SQL UPDATE事件无法通过消息事件与discord.js一起正常使用

时间:2019-06-26 08:11:08

标签: javascript mysql sql npm discord.js

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

我尝试了多种类型的UPDATE,甚至都没有解决。

请参阅以下日志记录屏幕截图: -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)
        }
    });  
});

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

2 个答案:

答案 0 :(得分:1)

您可以使用MySql运算符来递增msgcount。因此,您无需进行选择查询。而且,您还需要对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);
    })
}

答案 1 :(得分:0)

我从未使用过不和谐的JS,但是您的代码逻辑对我来说似乎是正确的,尽管某些部分对我来说很奇怪:

sql = `UPDATE logs SET msgcount = ${newMessageCount} WHERE id=${message.author.id}`
        connection.query(sql, console.log)

为什么这部分在每行之后都没有半冒号?

我也忘记了带字符串的`符号的行为,但是您确定sql查询正确吗(例如消息计数和id值正确替换了变量)?尝试打印以查看

(对于“选择”查询,您使用撇号)