当前位置: 首页 > 知识库问答 >
问题:

MYSQL语法错误,但所有内容都写对了

孔光赫
2023-03-14

我正在尝试使用node JS读取我的MySql数据库。我实际上已经在另一个文件中做了,在那里它工作得很好!我正在使用:

console.log('GuildId: ' + guildId);

let MemberCountChannel = new Map();{

connection.promise().query( guildId,
    `SELECT memberCountId FROM GuildConfigurable WHERE guildId = '${guildId}'`
).then(result => {
    MemberCountChannel.set(guildId, result[0][0].memberCountId);
    MemberCountChannelId = MemberCountChannel.get(guildId);

console.log(MemberCountChannelId);

我知道GuildId是对的,因为它把它记录在我代码的开头。在执行该代码时,我会得到以下信息:

GuildId: 776182101337833474
Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '776182101337833474' at line 1
    at PromiseConnection.query (/home/ubuntu/discord-bot-v2/node_modules/mysql2/promise.js:92:22)
    at Timeout._onTimeout (/home/ubuntu/discord-bot-v2/counters/member-counter.js:20:26)
    at listOnTimeout (node:internal/timers:556:17)
    at processTimers (node:internal/timers:499:7) {
  code: 'ER_PARSE_ERROR',
  errno: 1064,
  sqlState: '42000',
  sqlMessage: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '776182101337833474' at line 1"
}

我已经尝试将“${guildId}”更改为仅为公会ID:

console.log('GuildId: ' + guildId);

    let MemberCountChannel = new Map();{

    connection.promise().query( guildId,
        `SELECT memberCountId FROM GuildConfigurable WHERE guildId = '776182101337833474'`
    ).then(result => {
        MemberCountChannel.set(guildId, result[0][0].memberCountId);
        MemberCountChannelId = MemberCountChannel.get(guildId);

    console.log(MemberCountChannelId);

但我得到了同样的输出。我的数据库表如下所示:

mysql> SELECT * FROM GuildConfigurable;
+--------------------+-----------+----------------+---------------+----------------+
| guildId            | cmdPrefix | radioChannelId | memberCountId | AutoStartRadio |
+--------------------+-----------+----------------+---------------+----------------+
| 776182101337833474 | <         | N/A            | N/A           | N              |
| 791351561182904381 | <         | N/A            | N/A           | N              |
| 804867729404067904 | <         | N/A            | N/A           | N              |
+--------------------+-----------+----------------+---------------+----------------+
3 rows in set (0.00 sec)

键入时:

SELECT memberCountId FROM GuildConfigurable WHERE guildId = 776182101337833474;
or
SELECT memberCountId FROM GuildConfigurable WHERE guildId = '776182101337833474';

在mysql控制台中,我得到了所需的输出:

SELECT memberCountId FROM GuildConfigurable WHERE guildId = 776182101337833474;
+---------------+
| memberCountId |
+---------------+
| N/A           |
+---------------+
1 row in set (0.01 sec)

你知道为什么我会犯这个错误吗?因为我很确定没有语法错误...

EDIT:

我已经完全重新安装了mysql2和mysql-server,并且在另一个文件中使用了基本相同的脚本来获取cmdprefix:

var guildId = message.guild.id; 
    getMemberCount(client, guildId);

    let guildCommandPrefix = new Map();
    connection.promise().query(
        `SELECT cmdPrefix FROM GuildConfigurable WHERE guildId = '${message.guild.id}'`
    ).then(result => {
        guildCommandPrefix.set(message.guild.id, result[0][0].cmdPrefix);
        prefix = guildCommandPrefix.get(message.guild.id);

这个很好用...

共有1个答案

琴光亮
2023-03-14

尝试在SELECT语句的末尾添加分号:

connection.promise().query( guildId,
        `SELECT memberCountId FROM GuildConfigurable WHERE guildId = '776182101337833474';`
    ).then(result => {
        MemberCountChannel.set(guildId, result[0][0].memberCountId);
        MemberCountChannelId = MemberCountChannel.get(guildId);
 类似资料:
  • 问题内容: 我正在使用xampp控制面板,然后从那里开始apache和mysql的过程。然后我转到mysql工作台,服务器状态似乎正常,这是一些信息 然后每次当我尝试为我的虚拟架构添加外键时: 我收到以下错误 那么,我该怎么做才能使xampp开始在mariaDb上使用mysql语法? 或者,如果我对问题的理解不正确,那么我应该怎么做,以便在使用xampp时不必再次面对此类问题? 问题答案: 问题是

  • 有时,项目中的许多广为流传的惯例和协定变得非常重要,你需要记录下来。为了保证这种文档的正统性,要清楚的表明这些内容基于邮件列表的讨论,并已经形成协定开始生效。随着你的编写,应当引用邮件列表归档中的相关讨论,对于任何不能确定的要点,要重新询问并确认。文档中不应当包含任何出其不意的东西:它不应当是协议的来源,而只是对于协议的描述。当然,如果它足够成功,人们会开始引用它来作为自己权利的来源,但是这只是说

  • 问题内容: 这个MySQL脚本会安装多个触发器。 它在一台运行MySQL 5.0.51b-community的机器上工作。在另一台运行MySQL 14.12 Distrib 5.0.45的计算机上,对于redhat-linux-gnu(i386),它会失败,并显示此错误消息,这似乎与; 有关;句法 : 第272行的错误1064(42000):您的SQL语法有错误; 查看与您的MySQL服务器版本相

  • 自1个月以来,我们一直在使用Flyway,没有遇到任何问题。 但是,今天我尝试添加一个很长(超过1500行)的新迁移脚本,遇到了一个奇怪的MySQL语法错误。 我在MySQL Workbench中打开了这个脚本,没有报告语法错误,脚本执行没有错误。 这个名为V10012__insert-acceptance-testing-event-moment-passed.sql的脚本包含以下说明。 插入语

  • 问题内容: 我有两个mysql表。 第一个称为“选择”,由id,user_id和widget_id字段组成。 另一个称为“小部件”,包括widget_id等几项内容。 我创建了一个过滤器,以便用户可以显示他/她选择的小部件,也可以显示他/她没有选择的小部件。对于他选择的人,我使用以下方法: 但是,我不知道如何显示他/她没有选择的内容。这不起作用(显示所有内容): 我该怎么做呢? 问题答案: 使用N

  • 问题内容: 我在许多JavaScript简介中都读了很多。我只是不明白。我一直认为对象是具有方法和属性的东西。我了解数组,因为它具有键值对。“字符串”或“数字”或“函数”怎么样?上面列出的这些东西对我来说就像是功能。这意味着您输入了一些东西,然后得到了一些东西。您实际上并没有获得访问属性或其他任何内容。在数组或“对象”列表中没有使用点符号。 是否有人用点符号编写每个方法的示例示例,这些示例的方法和