簡體   English   中英

根據if條件插入多行

[英]insert multiple rows based on an if condition

我將返回一個結果數組,並將其放入foreach循環中,並且每個結果都針對單個金額進行檢查。 只要滿足條件,就應該插入行。 但是,沒有數據插入數據庫,但是錯誤日志也為空,即:我沒有錯誤。

        foreach ($invoices as $invoice) {
           if ($invoice->amount <= $this->amount) {
               $stmt = $db->prepare("INSERT INTO `payment_link` (`amount`) VALUES (:amount)");
               $stmt->bindValue(":amount", $invoice->amount, PDO::PARAM_STR);
               $stmt->execute();
           }
        }

print_r($invoices)給我:

Array ( [0] => App\Models\Invoice Object ( [customer_id] => [description] => [date_created] => [amount] => 300.00 [total:App\Models\Invoice:private] => [invoice_id] => [line_description] => [line_amount] => [errors] => Array ( ) ) [1] => App\Models\Invoice Object ( [customer_id] => [description] => [date_created] => [amount] => 500.00 [total:App\Models\Invoice:private] => [invoice_id] => [line_description] => [line_amount] => [errors] => Array ( ) ) ) Array ( [0] => App\Models\Invoice Object ( [customer_id] => [description] => [date_created] => [amount] => 300.00 [total:App\Models\Invoice:private] => [invoice_id] => [line_description] => [line_amount] => [errors] => Array ( ) ) [1] => App\Models\Invoice Object ( [customer_id] => [description] => [date_created] => [amount] => 500.00 [total:App\Models\Invoice:private] => [invoice_id] => [line_description] => [line_amount] => [errors] => Array ( ) ) )

[基於問題中的代碼,而非注釋中的討論]

您需要注意。 讓計算機告訴您為什么它沒有插入任何行。 php doc$stmt->execute(); 成功返回TRUE ,失敗返回FALSE

測試結果並將其發布到錯誤日志(或回顯到屏幕,任何適合您的方法)。

$result = $stmt->execute();
if ($result) {
    error_log("row inserted successfully");
} 
else {
    error_log("insert FAILED");
}

如果沒有反饋,則循環不會執行或前面的語句之一失敗。 (如果成功,它們還返回TRUE,如果失敗,則返回FALSE)。

如果顯示“插入失敗”,則可以從PDOStatement :: errorinfo獲得更多詳細信息。

如果顯示“行插入成功”,那么就需要進行一些調查。 (例如:程序是否使用TRANSACTIONS並需要提交?)

從收集您沒有的信息開始,它將幫助您找到真正的問題。

暫無
暫無

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

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