gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 17:30:43 26 4
gpt4 key购买 nike

我是nodejs和mysql的新手。我有一个从 post 获得的对象数组,想要将其插入到 mysql 数据库中。如果数据已经存在,则对数据库运行更新查询。问题是插入查询不循环整个数组。它只是插入数组的最后一个条目。这是我的代码:

数组数据:bukukasData

[{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 查询

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 });
});

使用此代码,插入数据库的唯一数据只是数组中的最后一个数据。如何将数组中的所有数据插入数据库?谢谢

最佳答案

使用let代替var。这样就可以避免这个问题。

这个问题的根源在于,在 JavaScript 中,for 循环遍历变量 i 并开始 bukukasData.length 乘以 db > 查询。给出的参数仅供引用。由于循环迭代速度非常快,因此第一个 sql 语句以设置为最后一个值的 i 开始,并且所有 db 语句都以 i 执行设置为bukukasData.length。 JavaScript 中引入 let 就是为了解决此类问题。使用 let 它将在后台创建变量的副本。

关于mysql - Nodejs Mysql Select Count 嵌套循环插入查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50687691/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com