Обновите несколько записей SQL одним запросом MySQL с помощью npm mysql - PullRequest
0 голосов
/ 06 января 2019

Спасибо, что взглянули на это! Я пытаюсь обновить несколько записей в MySQL одним запросом; Тем не менее, я использую класс с Promises для создания группы запросов синхронизации, и я не могу заставить это работать. Вот что у меня сейчас есть:

req.body - массив объектов с двумя парами ключ / значение ...

API:

router.post('/verified', (req, res) => {
    let database = new Database(dbOptions);
    let verifiedItemsArray = [];
    let sqlQueryArray = [];

    let updateQuery = 'UPDATE `raw_unverified` SET `funding_source` = ? WHERE `ritm_number` = ?';
    let verifiedItemArray = [req.body[0].funding_source, req.body[0].ritm_number];

    database.beginTransaction([updateQuery], verifiedItemArray)
        .then(response => console.log(response))
        .catch(error => console.log(error));

    res.send('Update Successful');
});

класс базы данных:

class Database {
    constructor(config) {
        this.connection = mysql.createConnection(config);
    }

    query(sqlQuery, sqlArgs) {
        console.log(sqlQuery);
        return new Promise( (resolve, reject) => {
            this.connection.query(sqlQuery, ((sqlArgs) ? [sqlArgs] : null), (error, results) => {

                if (error) return reject(error);
                resolve(results);
            });
        });
    }

    beginTransaction(sqlQueries, sqlArgs) {
        return new Promise( (resolve, reject) => {
            let allResults = [];
            this.connection.beginTransaction( (error) => {
                if (error) return reject(error);

                for (let i = 0; i < sqlQueries.length; i++) {
                    this.query(sqlQueries[i], ((sqlArgs) ? sqlArgs[i] : null))
                        .then((results) => {
                            allResults.push(results);
                        })
                        .catch((error) => {
                            throw error;
                        });
                }

                this.connection.commit( (error) => {
                    if (error) return reject(error);
                    resolve(allResults);
                });
            });
        });
    }
}

module.exports = Database;

И вот ошибка, которую я получаю:

ОБНОВЛЕНИЕ raw_unverified SET funding_source =? ГДЕ ritm_number =?

(узел: 8216) UnhandledPromiseRejectionWarning: Ошибка: ER_PARSE_ERROR: в синтаксисе SQL есть ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с '?' в строке 1

Любая помощь будет высоко ценится, и все, что я мог бы сделать лучше, пожалуйста, не стесняйтесь указывать!

Заранее всем спасибо!

1 Ответ

0 голосов
/ 06 января 2019

В этой строке

this.query(sqlQueries[i], ((sqlArgs) ? sqlArgs[i] : null))

вы передаете аргументы запросам по индексу - это означает, что вам нужно изменить

database.beginTransaction([updateQuery], verifiedItemArray)

до

database.beginTransaction([updateQuery], [verifiedItemArray])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...