我想更新我的資料庫,然后根據更新是否成功執行某些功能。
//Query DB to debit user
db.query(`UPDATE users SET wallet=newBalance WHERE userId=${iserId}`, (err, data)=>{
if(err){
return res.send(err)}
//Do something with data only if UPDATE was successful.
console.log('Update was successful');
res.send('wallet debuted Successfully')
})
}
然而,我意識到即使在查詢中提供了錯誤的 userId,也會發送成功回應。
如何確保僅在實際發生更新時才發送成功回應?
我試過使用:
if(!results){res.send('Failed to debit wallet')}
else{res.send("Wallet debited Successfully"}
我仍然遇到同樣的問題
uj5u.com熱心網友回復:
如果您mysql在 NodeJs 專案中使用 npm 包,那么您可以使用下面的邏輯來確定在UPDATE您擁有的給定 userId 上運行查詢后發生了什么。
//Query DB to debit user
db.query(`UPDATE users SET wallet=newBalance WHERE userId=${iserId}`, (err, data) => {
if (err) {
return res.send(err)
}
console.log(data);
/**
* This is returned when update was successful
* {
* "fieldCount": 0,
* "affectedRows": 1,
* "insertId": 0,
* "serverStatus": 2,
* "warningCount": 0,
* "message": "(Rows matched: 1 Changed: 1 Warnings: 0",
* "protocol41": true,
* "changedRows": 1
* }
*/
/**
* This is returned when no matching rows are found
* {
* "fieldCount": 0,
* "affectedRows": 0,
* "insertId": 0,
* "serverStatus": 2,
* "warningCount": 0,
* "message": "(Rows matched: 0 Changed: 0 Warnings: 0",
* "protocol41": true,
* "changedRows": 0
* }
*/
if (data.affectedRows === 0) {
console.log("Nothing changed in this update");
// Do something
}
// Do something with data only if UPDATE was successful.
console.log('Update was successful');
res.send('wallet debuted Successfully')
});
另一種方法是先獲取資料并檢查是否有任何要更新的內容。
因此,您將運行 fetch 查詢,例如
select wallet, userId from users where userId = ?
現在,如果上述查詢回傳空串列,則userId無效,如果userId有效,則您可以檢查錢包金額并進行相應更新。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/452185.html
