在 discordjs 中找不到 mysql 语法错误

Posted

技术标签:

【中文标题】在 discordjs 中找不到 mysql 语法错误【英文标题】:unable to find mysql syntax error in discordjs 【发布时间】:2021-05-07 00:15:43 【问题描述】:

我正在尝试使用 mysql 包在 discordjs 中进行 sql 查询。 查询(如果在 sql server 中使用)按预期完美运行, 但我得到一个 PARSE ERROR 试图在 js 中使用相同的查询:

SET @ROW_NUMBER = 0; SELECT s.level,s.exp,s.number 
FROM ( SELECT userID,level,exp,(@ROW_NUMBER:=@ROW_NUMBER + 1 ) AS number FROM levels ORDER BY level DESC) AS s 
WHERE userID = "$userID";

discordjs中的代码:

//some code...
con.query(`SET @ROW_NUMBER = 0; SELECT s.level,s.exp,s.number 
FROM ( SELECT userID,level,exp,(@ROW_NUMBER:=@ROW_NUMBER + 1 ) AS number 
FROM levels ORDER BY level DESC) AS s 
WHERE userID ="$userID";`,(err,rows) =>
 if(err)return console.log(err); 
//other code

我得到的错误:

code: 'ER_PARSE_ERROR',
errno: 1064,
sqlMessage: "You have an error in your SQL syntax; check the manual that
corresponds to your MariaDB server version for the right syntax to use near 'SELECT s.level,s.exp,s.number FROM ( SELECT userID ,level ,exp ,(@ROW_NUMBER:...' at line 1",
sqlState: '42000',
index: 0,
sql: 'SET @ROW_NUMBER = 0; SELECT s.level,s.exp,s.number FROM ( SELECT
userID ,level ,exp ,(@ROW_NUMBER:=@ROW_NUMBER + 1 ) AS number FROM levels
ORDER BY level DESC) AS s WHERE userID = "258217948819357697";'

【问题讨论】:

【参考方案1】:

错误消息显示您的连接器不允许多查询(两个查询作为一批发送)。

将变量初始化移动到 FROM 子句中。

SELECT s.level,s.exp,s.number 
FROM ( SELECT userID, level, exp, ( @ROW_NUMBER:=@ROW_NUMBER + 1 ) AS number 
       FROM levels, (SELECT @ROW_NUMBER := 0) init_variable
       ORDER BY level DESC ) AS s 
WHERE userID = "$userID";

PS。如果您的 MariaDB 版本是 10.2.1 或更高版本,则在 CTE 中使用 ROW_NUMBER() 窗口函数而不是变量。

【讨论】:

以上是关于在 discordjs 中找不到 mysql 语法错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥在集合中找不到 Mysql 存储过程参数?

在 OS X 10.7 中找不到 Mysql 命令

在 MySQL 中找不到 outfile 创建的文件

在 Docker 中找不到 MySQL 的 mysql_config [重复]

来自守护进程的错误响应:解析 Dockerfile 失败:语法错误 - 在“RUN”中找不到 =。必须采用以下形式:name=value

(+)mysql中外部连接的语法[重复]