检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 1 行的 '' 附近使用如何修复 [关闭]

Posted

技术标签:

【中文标题】检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 1 行的 \'\' 附近使用如何修复 [关闭]【英文标题】:check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 how to fix [closed]检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 1 行的 '' 附近使用如何修复 [关闭] 【发布时间】:2021-01-26 12:24:30 【问题描述】:

我正在编写一个不和谐的机器人,并且我正在尝试获取 mysql,以便我可以保留有关玩家的数据。当我尝试将 MySQL 连接到 discord.js 和 node.js 时,它说:

ER_PARSE_ERROR:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '' 附近使用正确的语法

我不知道这意味着什么,所以如果有人知道如何解决这个问题,谢谢。

这是我的代码:

    const Discord = require('discord.js');
const mysql = require('mysql');

const client = new Discord.Client();
const prefix = "p ";

client.once('ready', () => 
    console.log('pog is online! Pogchamp')
    
)


var con = mysql.createConnection(
  host: "127.0.0.1",
  socketPath: "/Applications/MAMP/tmp/mysql/mysql.sock",
  user: "root",
  password: "1234",
  database: "PogBot"
);
con.connect(function(err) 
    if (err)
    
        console.log("ERROR: " + err.message);
        return;
    
    console.log("Connected!");
);


/*shop*/
const shop = new Discord.MessageEmbed()
    .setColor('#00FF00')
    .setTitle('Shop')
    .setDescription('Pog Shop')
    .addFields(
         name: '\u200B', value: '\u200B' ,
         name: 'How to buy', value: 'use "pogs buy (itemName)"to buy an item' ,
         name: 'Laptop :computer:',         value: '1000 Coins', inline: true ,
         name: 'Phone :mobile_phone:',            value: '400 Coins', inline: true ,
         name: 'Mouse :mouse_three_button:',    value: '100 Coins', inline: true ,
    )

client.on('message', message =>
    if(message.author.bot)
        return;
    if(message.content.startsWith(prefix + "id"))
        message.author.send('your id: ' + message.author.id);
    
    if(message.content.startsWith(prefix + 'me'))
        sql = "SELECT * FROM users WHERE user_id = " + message.author.id;
        con.query(sql, function (err, result)
        
            try
            
                if (err) 
                    throw new exception(err.message);

                if (result.length > 1)
                    throw new exception("select user_id=" + message.author.id + " got (result.length) records");
                
                if (result.length == 0)
                
                    console.log("Not user");
                    return;
                
                
                message.channel.send("Tag: " + result[0].tag + "\nCoins: " + result[0].pog_coins);
            
            catch( exception )
            
                
                // WRITE TO FILE -> ... exception.message
                console.log("Something went wrong. Error #" + exception.line);
            
        );
    
    if(message.content.startsWith(prefix + "create"))
        
        sql = "SELECT * FROM users WHERE user_id = " + message.author.id;
        con.query(sql, function (err, result)
        
            if (err) 
                console.log(err.message);

            if (result.length > 1)
            
                message.channel.send("Account already created:");                    
                message.channel.send("Tag: " + result[0].tag + "\nCoins: " + result[0].pog_coins);
                return;
            
            sql = "INSERT INTO users(user_id, tag, pog_coins)VALUES(" + message.author.id + ", " + message.author.tag + ", 0)";        
            con.query(sql, function (err        , result)
               
                if (err) 
                console.log(err.message);
                
                message.channel.send("Account Created!");   
            );
        );
    
    if(message.content.startsWith(prefix + "shop"))
        message.channel.send(shop);
        
    /*if(message.content.startsWith('pog'))
        message.channel.send('champ')
    if(message.content.startsWith('champ'))
        message.channel.send('pog')*/
)

【问题讨论】:

您的message.author.tag 中可能包含非字母数字字符。 【参考方案1】:

了解实际查询会有所帮助,这应该是错误消息的一部分。

我认为问题出在

sql = "INSERT INTO users(user_id, tag, pog_coins)VALUES(" + message.author.id + ", " + message.author.tag + ", 0)";

尤其是:

    + message.author.tag +

我假设标签是文本,而不是数字,所以它必须是引号,例如

+ ", '" + message.author.tag + "', 0)"
     ^                          ^

但是现在可能发生的下一件事是 SQL 注入,因此您应该考虑为此使用准备好的语句,而不是仅使用字符串连接来构造查询字符串。

【讨论】:

天哪,非常感谢,你是最棒的!

以上是关于检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 1 行的 '' 附近使用如何修复 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法使用

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法解决方案:

Symfony2 抛出学说异常“检查与您的 MySQL 服务器版本相对应的手册,以获取在 'group' 附近使用的正确语法”

MySQL - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册以获取正确的语法 - phpMyAdmin

SQL 错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法

#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在附近使用的正确语法