簡體   English   中英

如何將計算字段插入數據庫?

[英]How to insert calculated field into database?

我正在向數據庫中插入多條記錄。 許多字段是一致的,但是計算一個字段,需要為插入數據庫的每條記錄計算/減去值。

<?php
$ExecuteQuery = new WA_MySQLi_Query($numeroseti);
$ExecuteQuery->Statement = "INSERT INTO transactions 
(fromAcct, amount, fromAcctNewBalance, toAcctNewBalance, toAcct, description, timestamp) 
(SELECT 1, ?, ?, balance + ?, acct_number, 'issuance', $time FROM users WHERE acct_number NOT LIKE '1800%' AND type <> 1 AND user_active = 1)";
$ExecuteQuery->bindParam("d", "".($_POST['issue_balance'])  ."", "0"); //acct1num
$ExecuteQuery->bindParam("i", "".($getSender->getColumnVal("balance") - $amount)  ."", "-1");
//acct2num
$ExecuteQuery->bindParam("i", "".($amount)  ."", "-1");
//acct3num
$ExecuteQuery->execute();
?>

該字段來自我遇到問題的fromAcctNewBalance 這是計算(如分類帳)新余額的代碼:

$getSender->getColumnVal("balance") - $amount;

問題是,它會將相同的值放入每條記錄中,而每次添加新記錄時它應該減去該數量。

例如,如果fromAcctNewBalance起始余額為 600,發給用戶的金額為 10,則添加的下一條記錄的fromAcctNewBalance應為 590,依此類推,直到它用完要添加到表中的記錄為止。

有人對我如何解決此問題有任何想法嗎?

我認為錯誤在於在bindParam中使用->

所以我嘗試在沒有bindParam$getSender->$getColumnVal - $amount;的情況下進行減法。 根本行不通。

像這樣使用它

$getSender = $getColumnVal("balance") - $amount;
$ExecuteQuery->bindParam("i", "".($getSender)  ."", "-1");

" -> ,當您想要調用實例上的方法或訪問實例屬性時使用。"

我不清楚您的$getColumnVal("balance")是方法還是實例。 如果是這樣,請像這樣使用它:

$getSender -> $getColumnVal("balance");
$getSender = $getSender - $amount;
$ExecuteQuery->bindParam("i", "".($getSender)  ."", "-1");

參考:

我們在哪里使用 PHP 中的 object 運算符“->”?

https://www.php.net/manual/de/language.types.object.php

編輯:

完整代碼示例

<?php
$ExecuteQuery = new WA_MySQLi_Query($numeroseti);
$ExecuteQuery->Statement = "INSERT INTO transactions 
(fromAcct, amount, fromAcctNewBalance, toAcctNewBalance, toAcct, description, timestamp) 
(SELECT 1, ?, ?, balance + ?, acct_number, 'issuance', $time FROM users WHERE acct_number NOT LIKE '1800%' AND type <> 1 AND user_active = 1)";
$ExecuteQuery->bindParam("d", "".($_POST['issue_balance'])  ."", "0"); //acct1num

//Use the one that fits best
    $getSender = $getColumnVal("balance") - $amount;
    $ExecuteQuery->bindParam("i", "".($getSender)  ."", "-1");

//or 
    $getSender -> $getColumnVal("balance");
    $getSender = $getSender - $amount;
    $ExecuteQuery->bindParam("i", "".($getSender)  ."", "-1");

//acct2num
$ExecuteQuery->bindParam("i", "".($amount)  ."", "-1");
//acct3num
$ExecuteQuery->execute();
?>

這最終為我工作:

    while (!$getRecipients->atEnd())
{
    $ExecuteQuery = new WA_MySQLi_Query($numeroseti);
    $ExecuteQuery->Statement = "INSERT INTO transactions 
     (fromAcct, amount, fromAcctNewBalance, toAcctNewBalance, toAcct, description, timestamp) 
    VALUES (1, ?, ?, ?, ?, 'issuance', $time)";                 
    $ExecuteQuery->bindParam("i", "".($amount)  ."", "0");
    $ExecuteQuery->bindParam("i", "".($startingbalance)   ."", "-1");   
    $ExecuteQuery->bindParam("i", "".($amount)  ."", "-1");
    $ExecuteQuery->bindParam("i", "".($getRecipients->getColumnVal("acct_number"))  ."", "-1");
    $ExecuteQuery->execute();
    
    $startingbalance = $startingbalance - $amount;
    $getRecipients->moveNext();
}
$getRecipients->moveFirst();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM