我的discord.js XP bot中出现ER_PARSE_ERROR错误

时间:2020-02-12 10:49:28

标签: mysql discord.js

当我尝试为XP创建discord.js机器人时,刚遇到一个名为“ ER_PARSE_ERROR”的错误。 有人可以帮我吗?这是我的代码:

    var con = mysql.createConnection({
  host: "127.0.0.1",
  user: "root",
  password: "",
  database: "sadb"
});

function generatedXp() {
  let min = 20;
  let max = 30;

  return Math.floor(Math.random() * (max - min + 1)) + min;
}

con.connect(err => {
  if(err) throw err;
  console.log("Connected to database!");
});

client.on("message", async message => {
  if(message.author.bot) return;
  if(message.channel.type === "dm") return;

  con.query(`SELECT $ FRM xp WHERE id = '` + message.author.id + `'`, (err, rows) => {
    if(err) throw err;

    let sql;

    if(rows.length < 1) {
      sql = `INSERT INT xp (id, xp) VALUES ('${message.author.id}', ${generatedXp()})`;

    } else{
      let xp = rows[0].xp;
      sql = `UPDATE xp SET xp = ${xp + generatedXp()} WHERE id = '${message.author.id}'`;
    }

    con.query(sql, console.log);
  });

  if(/(?:http?:\/)?discord(?:app.com\/invite|.gg)/gi.test(message.content)) {
    message.delete();
    return;
  }

  let messageArray = message.content.split(/\s+/g);
  let command = messageArray[0];
  let args = messageArray.slice(1);

  if(!command.startsWith(prefix)) return;

  let limit = client.ratelimits.get(message.author.id);
  let now = Date.now()
  let timeLimit = 2000;

  if(limit != null) {
    if(limit >= now - timeLimit) {
      message.delete()
      return message.channel.send("Vous venez de vous faire ratelimited. Essayez dans `" + (Math.abs((now - limit) - timeLimit) / 1000).toFixed(2) + "` seconds").then(m => m.delete(2000));

    }else{
      client.ratelimits.set(message.author.id, now);
    }
  }else{
    client.ratelimits.set(message.author.id, now);
  }

  let cmd = client.command.get(command.slice(prefix.length));
  if(cmd) cmd.run(client, message, args, con);
});

我刚才遇到的错误:

ER_PARSE_ERROR: Syntax error 'xp WHERE id = '649196303137505298'' at lign 1
    at Query.Sequence._packetToError (c:\Users\user\Desktop\BotDiscord\Discord Bot\node_modules\mysql\lib\protocol\sequences\Sequence.js:47:14)
    at Query.ErrorPacket (c:\Users\user\Desktop\BotDiscord\Discord Bot\node_modules\mysql\lib\protocol\sequences\Query.js:79:18)
    at Protocol._parsePacket (c:\Users\user\Desktop\BotDiscord\Discord Bot\node_modules\mysql\lib\protocol\Protocol.js:291:23)
    at Parser._parsePacket (c:\Users\user\Desktop\BotDiscord\Discord Bot\node_modules\mysql\lib\protocol\Parser.js:433:10)
    at Parser.write (c:\Users\user\Desktop\BotDiscord\Discord Bot\node_modules\mysql\lib\protocol\Parser.js:43:10)
    at Protocol.write (c:\Users\user\Desktop\BotDiscord\Discord Bot\node_modules\mysql\lib\protocol\Protocol.js:38:16)
    at Socket.<anonymous> (c:\Users\user\Desktop\BotDiscord\Discord Bot\node_modules\mysql\lib\Connection.js:88:28)
    at Socket.<anonymous> (c:\Users\user\Desktop\BotDiscord\Discord Bot\node_modules\mysql\lib\Connection.js:526:10)
    at Socket.emit (events.js:210:5)
    at addChunk (_stream_readable.js:309:12)
    --------------------
    at Protocol._enqueue (c:\Users\user\Desktop\BotDiscord\Discord Bot\node_modules\mysql\lib\protocol\Protocol.js:144:48)
    at Connection.query (c:\Users\user\Desktop\BotDiscord\Discord Bot\node_modules\mysql\lib\Connection.js:198:25)
    at Client.<anonymous> (c:\Users\user\Desktop\BotDiscord\Discord Bot\index.js:45:7)
    at Client.emit (events.js:215:7)
    at MessageCreateHandler.handle (c:\Users\user\Desktop\BotDiscord\Discord Bot\node_modules\discord.js\src\client\websocket\packets\handlers\MessageCreate.js:9:34)
    at WebSocketPacketManager.handle (c:\Users\user\Desktop\BotDiscord\Discord Bot\node_modules\discord.js\src\client\websocket\packets\WebSocketPacketManager.js:105:65)
    at WebSocketConnection.onPacket (c:\Users\user\Desktop\BotDiscord\Discord Bot\node_modules\discord.js\src\client\websocket\WebSocketConnection.js:333:35)
    at WebSocketConnection.onMessage (c:\Users\user\Desktop\BotDiscord\Discord Bot\node_modules\discord.js\src\client\websocket\WebSocketConnection.js:296:17)
    at WebSocket.onMessage (c:\Users\user\Desktop\BotDiscord\Discord Bot\node_modules\ws\lib\event-target.js:120:16)
    at WebSocket.emit (events.js:210:5)

请,我真的需要帮助;-; ,我尝试修复它,但在代码中没有发现任何语法错误...

(对不起,我英语很不好,我是法国人)

1 个答案:

答案 0 :(得分:1)

使用placeholder values,如下所示:

con.query('SELECT $ FRM xp WHERE id = ?', [message.author.id], (err, rows) => {
...
});

这样做,您的请求将被转义(实际上不需要带id,但是您永远不要太小心,mysql模块将在语法部分上做得很好。