0
client.on("message", message => {
  const args = message.content.slice(config.prefix.length).trim().split(' ');
      const args2 = message.content.slice('test', ',', args).trim(args).split(' ', args);
  const command = args.shift().toLowerCase();
    if (command === "tbal") {
        if (message.author.bot) return;
    const data = sql.prepare(`SELECT bal FROM ${args}`).get();
      message.channel.send(`You have ${data.bal}`)
  }
  if (command == "tgive") {
    //Get their current XP
    let userscore = sql.prepare(`SELECT bal FROM ${args}`).get()
    let pointsToAdd = parseInt(args2[1], [10]);
    if(!pointsToAdd) return message.reply("How much? You didn't tell me that!");
    //XP level update
    const valueadd = sql.prepare(`INSERT OR REPLACE INTO ${args} (bal) VALUES (userscore + pointsToAdd);`)

    client.setScore.run(userscore)
    return message.channel.send(`${args} has received ${pointsToAdd}. New balance: ${data.bal}`);

}
});

有代码,我得到的错误是这样的:let userscore = sql.prepare(`SELECT bal FROM ${args}`).get()

SqliteError: near "5": syntax error

附近的“5”是args2我执行命令的eco tgive args1 5地方,args1 是 SQLite 表的名称。

4

2 回答 2

0

您在此处传递给“切片”函数的参数:

const args2 = message.content.slice('test', ',', args).trim(args).split(' ', args);

没有任何意义。

Slice 有两个参数,一个 beginIndex 和 endIndex,都是数字。这可能是问题的根源。

当您尝试使用 args 参数时

let userscore = sql.prepare(`SELECT bal FROM ${args}`).get()

它可能处于某种意想不到的状态。

这是有关切片方法的文档: https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice

于 2020-01-15T16:18:53.280 回答
0
`SELECT bal FROM ${args}`

您只需要使用args数组中需要的元素,而不是每个参数。如果args1 是您提供的示例命令中的表名,请将其用作查询,注意args[2]返回数组中的第三个元素:

`SELECT bal FROM ${args[2]}`

将数组转换为字符串时,其元素会连接在一起,并导致格式错误的语法导致您的错误。

于 2020-01-15T17:25:39.597 回答