Как проверить, существуют ли уже данные этого идентификатора с разногласиями. js mysql - PullRequest
0 голосов
/ 23 апреля 2020

Поэтому я пытаюсь вставить данные в свою таблицу с пакетом MySQL для nodejs, и, как вы можете видеть по ссылке, я сделал заявление if, что строка запроса на выборку пуста, выполните этот запрос, чтобы добавить данные или, если данные уже существуют, просто отправьте ответное сообщение. Моя проблема заключается в том, что он не читает оператор if должным образом, говоря, что строк не существует, пока существуют существующие данные.

error:

code: 'ER_DUP_ENTRY', errno: 1062, sqlMessage: «Дублирующая запись« 2147483647 »для ключа« PRIMARY », sqlState:« 23000 », индекс: 0, sql:« INSERT INTO test (discord_id, empire_name) VALUES ('188320189866180617', 'empire') "

код:

const db = require('../../db');

module.exports = {
    name: "start",
    category: "empire",
    description: "Start your journey to create your empire.",
    usage: "<string>",
    run: async (client, message, args) => {

        if (message.deletable) message.delete();

        // No args
        if (!args[0]) {
            return message.reply("please give your empire a name.")
                .then(m => m.delete(5000));
        }

        db.query(`SELECT * FROM test WHERE discord_id = '${message.author.id}'`, (err, rows) => { 
            if(err) throw err;

            if(!rows.length) {  
                db.query(`INSERT INTO test (discord_id, empire_name) VALUES ('${message.author.id}', '${args[0]}')`);

                return message.channel.send(`${args[0]} has been established!`);
            } else {  
                return message.channel.send(`You've already started an empire.`);
            }
        });
    }
}

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

Я был большим придурком. Я использовал phpmyadmin и xampp, а не сервер mysql. Все запросы теперь работают правильно, но спасибо за помощь!

0 голосов
/ 24 апреля 2020

Это всегда будет в случае параллельного выполнения API.

    const db = require('../../db');

    module.exports = {
        name: "start",
        category: "empire",
        description: "Start your journey to create your empire.",
        usage: "<string>",
        run: async (client, message, args) => {

            if (message.deletable) message.delete();

            // No args
            if (!args[0]) {
                return message.reply("please give your empire a name.")
                    .then(m => m.delete(5000));
            }
            let sqlQuery = `INSERT INTO test (discord_id, empire_name) 
                SELECT * FROM (SELECT '${message.author.id}', '${args[0]}') AS tmp
                WHERE NOT EXISTS (
                    SELECT * FROM test WHERE discord_id = '${message.author.id}'
                ) LIMIT 1`;
            db.query(sqlQuery, (err, result) => { 
                if(err) throw err;

                if (result && result.affectedRows == 0) {
                    return message.channel.send(`You've already started an empire.`);
                } else {
                    return message.channel.send(`${args[0]} has been established!`);
                }
            });
        }
    }
...