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 清除所有不是图像或链接的消息 [关闭]