使用npm mysql使用单查询mysql query更新多个sql记录

zaqlnxep  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(234)

谢谢你看这个!我试图用一个查询更新mysql中的一些记录;但是,我使用一个有承诺的类来创建一组同步查询,我似乎无法让它工作。以下是我目前的情况:
req.body是一个包含两个键/值对的对象数组。。。
应用程序编程接口:

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_unverifiedfunding_source = ? 哪里 ritm_number = ?
(node:8216)UnhandledPromisejectionWarning:错误:er\u parse\u错误:您的sql语法有错误;请查看与mysql服务器版本对应的手册,以获取在第1行的“?”附近使用的正确语法
任何帮助将不胜感激,任何我可以做得更好的,请随时指出!
提前谢谢大家!

c3frrgcw

c3frrgcw1#

在这条线上

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

您正在按索引向查询传递参数—这意味着您需要更改

database.beginTransaction([updateQuery], verifiedItemArray)

database.beginTransaction([updateQuery], [verifiedItemArray])

相关问题