【问题标题】:Node.js, discord.js & MySQL - ER_NO_SUCH_TABLE: Table 'NAME' doesn't existNode.js、discord.js 和 MySQL - ER_NO_SUCH_TABLE:表 'NAME' 不存在
【发布时间】:2021-04-14 16:00:51
【问题描述】:

2 天前刚开始编写一个不和谐的机器人,我现在被困在这里。 我得到的错误:ER_NO_SUCH_TABLE: Table 'mariobot.522488285910663201' doesn't exist

与此有关的部分代码:

con.query(`SELECT * FROM ??`, [targetUserId], (err, result, fields) => {
  if (err) {
    con.query(
      `CREATE TABLE IF NOT EXISTS ?? (userName varchar(255),positiveVouches int(10),negativeVouches int(10),totalVouches int(10),createdAt timestamp)`,
      [targetUserId],
      function (err, result) {
        if (err) throw err;
        console.log(`Table for ${userName} successfully created.`);
      }
    );

    message.react("✅");
    message.reply(`you successfully registered.`);

    var sql = mysql.format(
      "INSERT INTO ?? SET ? = ?, positiveVouches = 0,negativeVouches = 0,totalVouches = 0,createdAt = ?",
      [targetUserId, "userName", userName, dformat]
    );
    con.query(sql, function (error, results, fields) {
      console.log(sql);
      if (err) {
        throw err;
      }
    });
    console.log(`Row for ${userName} successfully added.`);
  } else {
    console.log(
      `${userName} tried to register again but a table already` + ` exists`.red
    );
    message.react("❎");
    message.reply(`you are already registered.`);
  }
});

该表存在于数据库中,所以我不知道它的真正原因。 DATABASE TABLE IMAGE LINK

【问题讨论】:

    标签: mysql node.js discord.js


    【解决方案1】:

    问题在于,在运行 CREATE TABLE 语句时,以下代码并未在其回调中完成。这意味着当语句运行时,它后面的代码(message.react() 等)在CREATE TABLE 语句完成之前运行。后来的con.query也存在同样的问题。

    要解决此问题,请将您的代码移动到运行CREATE TABLE 完成的回调中:

    con.query(`SELECT * FROM ??`, [targetUserId], (err, result, fields) => {
      if (err) {
        con.query(
          `CREATE TABLE IF NOT EXISTS ?? (userName varchar(255),positiveVouches int(10),negativeVouches int(10),totalVouches int(10),createdAt timestamp)`,
          [targetUserId],
          function (err, result) {
            if (err) throw err;
            console.log(`Table for ${userName} successfully created.`);
    
            message.react("✅");
            message.reply(`you successfully registered.`);
    
            var sql = mysql.format(
              "INSERT INTO ?? SET ? = ?, positiveVouches = 0,negativeVouches = 0,totalVouches = 0,createdAt = ?",
              [targetUserId, "userName", userName, dformat]
            );
            con.query(sql, function (error, results, fields) {
              console.log(sql);
              if (err) {
                throw err;
              }
    
              console.log(`Row for ${userName} successfully added.`);
            });
          }
        );
      } else {
        console.log(
          `${userName} tried to register again but a table already` + ` exists`.red
        );
        message.react("❎");
        message.reply(`you are already registered.`);
      }
    });
    

    【讨论】:

    • 谢谢!它不会在终端中输出任何错误,但由于某种原因我仍然在数据库中看不到任何行。控制台:i.imgur.com/QQ008nP.png DB:i.imgur.com/fo9DMnx.png 当我在 phpAdmin 控制台中手动执行查询时,它说语法无效。
    • @mariokamani 将查询中的表名改为mariobot.`522488285910663201` 是否有效?
    • 看起来不像。 imgur.com/a/n0Sw55I
    • 您确定您已连接到同一个数据库主机并选择了同一个数据库?如果您将 debug: true 传递给 createConnection 以查看正在发送的原始查询,并在数据库管理工具中以相同的顺序运行这些查询,该怎么办?
    • 将查询从INSERT INTO ?? SET ? = ? 更改为INSERT INTO ?? SET userName = ?,这似乎可以解决问题。非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 2021-11-26
    • 2018-09-17
    • 2020-12-07
    • 2021-08-14
    • 2020-09-10
    • 1970-01-01
    相关资源
    最近更新 更多