Проблема с запросами в базу данных mysql (удаление данных)

Рейтинг: 1Ответов: 2Опубликовано: 15.04.2023

Есть вот такой код

on('message', async (ctx) => {
    let user_id = ctx.message.from.id
    const message = ctx.message.text
    // ВКлючить проверку
    if (user_id == conf.admin_id && message.includes('/on')) {
        let group_id = ctx.chat.id
        let name_channel = message.substr(4)
        group_check = 'yes'
        const connection = mysql.createConnection({
            host: "localhost",
            user: "root",
            database: "check",
            password: ""
        })
        
        const sql = `INSERT INTO list (group_id, channel_name, check_group) VALUES (${group_id}, '${name_channel}', '${group_check}')`
        connection.query(sql, function (err, results) {
            if (err) console.log(err)
        })
        connection.end()
        ctx.reply(`Check: ${group_check}`)
    }
    // Выключить проверку
    if (user_id == conf.admin_id && message.includes('/off')) {
        let group_id = String(ctx.chat.id)
        group_check = 'no'
        const connection = mysql.createConnection({
            host: "localhost",
            user: "root",
            database: "check",
            password: ""
        })
        const sql = `DELETE FROM list WHERE group_id='?'`
        let data = []
        data.push(group_id)

        connection.query(sql, function (err, results) {
            if (err) console.log(err)
        })
        connection.end()
        ctx.reply(`Check: ${group_check}`)

    }

    // Проверка
    if (group_check == 'yes') {
        let user = ctx.message.from.first_name
        let message_id = ctx.message.message_id
        let pass = await ctx.telegram.getChatMember(conf.chatId, user_id)

        if (pass.status == 'left') {
            ctx.deleteMessage(message_id)
            ctx.replyWithHTML(`${user}, подпишись на канал`, Markup.inlineKeyboard([
                [
                    {
                        text: 'Заказать рекламу',
                        url: 'https://t.me/socmobi'
                    }
                ]
            ]),
                {
                    disabled_web_page_preview: true
                })
        }
    }

})

Проблема в блоке (Выключить проверку) В чем суть: когда включаю проверку то в таблицу улетает число "group_id". В самой таблице тип данных стоит VARCHAR. Я так понимаю, что мои данные прилетают числом, но формат id групп в телеге следующий -100 и т.д. Значит это уже текст (прям запутался тут). Теперь иду в выключение и хочу с базы данную запись удалить. Делаю запрос

let group_id = ctx.chat.id
        group_check = 'no'
        const connection = mysql.createConnection({
            host: "localhost",
            user: "root",
            database: "check",
            password: ""
        })
        const sql = `DELETE FROM list WHERE group_id=?`
        let data = []
        data.push(group_id)

Вываливается сообщение про синтаксическую ошибку. Меняю на строку:

let group_id = String(ctx.chat.id)
        group_check = 'no'
        const connection = mysql.createConnection({
            host: "localhost",
            user: "root",
            database: "check",
            password: ""
        })
        const sql = `DELETE FROM list WHERE group_id='?'`
        let data = []
        data.push(group_id)

Все отрабатывает без ошибок но строка с таблицы не удаляется. Подскажите, что не так или где я путаюсь. Пробовал уже методом подбора (строки, числа) менять - результата нет. Только если отправлять строку, при удалении, ошибки нет, но и результата нет. Спасибо за любую помощь

Ответы

▲ 1

Вы же создаёте массив data. А не передаёте его никуда.

    const sql = `DELETE FROM list WHERE group_id=?`;
    let data = [];
    data.push(group_id);
    connection.query(sql, data, function (err, results) {
         if (err) console.log(err)
    })

Либо сразу так, без data

    const sql = `DELETE FROM list WHERE group_id=?`
    connection.query(sql, [group_id], function (err, results) {
         if (err) console.log(err)
    })
▲ 0

Попробуйте так

"DELETE FROM `list` WHERE group_id='?'"