Node.js、discord.js 和 MySQL - ER_NO_SUCH_TABLE:表 'NAME' 不存在

Posted

技术标签:

【中文标题】Node.js、discord.js 和 MySQL - ER_NO_SUCH_TABLE:表 \'NAME\' 不存在【英文标题】: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

【问题讨论】:

【参考方案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 = ?,这似乎可以解决问题。非常感谢您的帮助!

以上是关于Node.js、discord.js 和 MySQL - ER_NO_SUCH_TABLE:表 'NAME' 不存在的主要内容,如果未能解决你的问题,请参考以下文章

Node.js、discord.js 和 MySQL - ER_NO_SUCH_TABLE:表 'NAME' 不存在

使用 Node.js、Mongoose 和 Discord.js 的未定义错误 [无法读取未定义的属性]

Discord.js + Node.js: SyntaxError: Unexpected token ''

使用 discord.js 和 Node.js 清除所有不是图像或链接的消息 [关闭]

如何将 postgres 查询分配给 node.js、Discord bot 和 postgres 集成中的变量?

Node.js + Discord.js:无法读取未定义的属性“类”