使用npm mysql

时间:2019-01-05 22:56:40

标签: javascript mysql sql

感谢您对此的关注!我试图用一个查询来更新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;

这是我得到的错误:

  

UPDATE raw_unverified SET funding_source =吗? ritm_number =吗?

     

(节点:8216)UnhandledPromiseRejectionWarning:错误:ER_PARSE_ERROR:您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以在'?'附近使用正确的语法。在第1行

任何帮助将不胜感激,任何我能做得更好的事情,请随时指出!

提前感谢大家!

1 个答案:

答案 0 :(得分:0)

在这一行

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

您正在按索引将参数传递给查询-这意味着您需要进行更改

database.beginTransaction([updateQuery], verifiedItemArray)

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