首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Nodejs Mysql Select Count嵌套循环插入查询

Nodejs Mysql Select Count嵌套循环插入查询
EN

Stack Overflow用户
提问于 2018-06-05 03:40:27
回答 1查看 448关注 0票数 0

我是nodejs和mysql的新手。我有一个从post获得对象数组,并希望将其插入mysql数据库。如果数据已经存在,则对数据库运行更新查询。问题是Insert查询没有循环整个数组。它只插入Array的最后一项。下面是我的代码:

阵列数据:bukukasData

代码语言:javascript
复制
[{transactionid: '562018965521', 
tanggal: '2018-06-05', 
kodeakun: 0, item: 'Saldo', 
debit: 100000, credit: 0, 
saldo: 100000},
{transactionid:'562018595664', 
tanggal:'2018-06-05', 
kodeakun: 0, 
item: 'Test Data', 
debit: 0, 
credit: 5000, 
saldo:95000}]

NodeJS查询

代码语言:javascript
复制
app.post('/api/addbukukas', function(req, res) {
    let bukukasData = req.body.bukukasData;
    var status = '';
    for (var i = 0; i < bukukasData.length; i++) {
        var transactionid = req.body.bukukasData[i].transactionid;
        var kodeakun = req.body.bukukasData[i].kodeakun;
        var item = req.body.bukukasData[i].item;
        var debit = req.body.bukukasData[i].debit;
        var credit = req.body.bukukasData[i].credit;
        var saldo = req.body.bukukasData[i].saldo;
        var tanggal = req.body.bukukasData[i].tanggal;

        db.query('SELECT COUNT (*) AS rowCount FROM bukukas WHERE transactionid = ?', [req.body.bukukasData[i].transactionid], function(error, result) {

            var rows = result[0].rowCount;
            if (rows > 0) {
                db.query('UPDATE bukukas SET transactionid=?, kodeakun=?, tanggal=?, item=?, debit=?, credit=?, saldo=?  WHERE transactionid = ?', [transactionid, kodeakun, tanggal, item, debit, credit, saldo, transactionid],
                    function(err, result) {
                        if (err) {

                            status = 'Update Gagal';
                        } else {
                            status = 'Update Success';
                        }
                    })
            } else {
                db.query('INSERT INTO bukukas (transactionid, kodeakun, tanggal, item, debit, credit, saldo) VALUES (?,?,?,?,?,?,?)', [transactionid, kodeakun, tanggal, item, debit, credit, saldo], function(err, insertresult) {

                    if (err) {
                        status = 'Insert Gagal';
                    } else {
                        status = "insertresult";
                    }
                })
            }

        })
    }
    console.log(status);
    return res.json({ status: status });
});

使用这段代码,插入到数据库中的唯一数据就是数组中的最后一个数据。如何将Array中的所有数据插入到数据库中?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-05 03:50:31

使用let而不是var。这将避免这个问题。

这个问题的根源是,在JavaScript中,for循环循环遍历变量i,并启动bukukasData.length来执行db查询。该参数仅供参考。由于循环迭代非常快,因此在开始时将i设置为最后一个值,所有db-statements都将在i设置为bukukasData.length的情况下执行。JavaScript引入了let来解决这样的问题。使用let,它将在后台创建变量的副本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50687691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档