Ошибка SQlite: синтаксическая ошибка около 5 (лучше-sqlite3) - PullRequest
0 голосов
/ 15 января 2020
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.

Ответы [ 2 ]

0 голосов
/ 15 января 2020
`SELECT bal FROM ${args}`

Вам нужно использовать только тот элемент, который вам нужен из массива args, в отличие от каждого аргумента. Если args1 является именем таблицы в предоставленной вами примерной команде, используйте его в качестве запроса, отметив, что args[2] возвращает третий элемент в массиве:

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

При преобразовании массива в строку его элементы объединяются вместе с ,, что приводит к неправильному синтаксису, вызывающему вашу ошибку.

0 голосов
/ 15 января 2020

Аргументы, которые вы передаете здесь функции 'slice':

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

...