首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

PHP 使用 MySQLi 處理 MySQL 交易完整範例

     編輯:MySQL 資料庫相關知識

PHP 透過 mysqli 擴展提供的方法實現 MySQL 交易控制,核心三大方法:

  • autocommit(bool):關閉/開啟自動提交。
  • rollback():發生錯誤時回滾至交易起始狀態。
  • commit():確認提交交易。

銀行轉帳經典範例

<?php
// 1. 建立連線
$conn = new mysqli("localhost", "username", "password", "db_name");
$conn->query("SET NAMES utf8mb4");

// 2. 關閉自動提交,開啟交易
$conn->autocommit(false);

try {
    // 3. 扣款:轉出方減少 1000
    $sql1 = "UPDATE tb_money SET money = money - 1000 WHERE user = 'user_out'";
    if (!$conn->query($sql1)) throw new Exception("扣款失敗");

    // 4. 入款:轉入方增加 1000
    $sql2 = "UPDATE tb_money SET money = money + 1000 WHERE user = 'user_in'";
    if (!$conn->query($sql2)) throw new Exception("入款失敗");

    // 5. 全部成功,提交交易
    $conn->commit();
    echo "轉帳成功";
} catch (Exception $e) {
    // 6. 任何失敗,回滾
    $conn->rollback();
    echo "轉帳失敗:" . $e->getMessage();
} finally {
    // 7. 恢復自動提交並關閉連線
    $conn->autocommit(true);
    $conn->close();
}
?>

關鍵點總結

  1. 必須在執行寫入 SQL 前呼叫 autocommit(false)。
  2. 使用 try-catch 包裹業務邏輯,確保例外時自動 rollback()。
  3. 成功完成所有操作後才呼叫 commit()。
  4. 最後務必 autocommit(true) 還原連線預設行為,避免影響後續非交易操作。

適用儲存引擎

交易功能僅支援 InnoDB、NDB Cluster 等支援 ACID 的儲存引擎;MyISAM 不支援交易,執行上述程式碼將隱性提交每條語句,無法達到原子性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved