ホームページ  >  記事  >  バックエンド開発  >  PHPデータベース接続におけるトランザクション処理の仕組みを詳しく解説

PHPデータベース接続におけるトランザクション処理の仕組みを詳しく解説

WBOY
WBOYオリジナル
2024-06-02 18:17:00732ブラウズ

PHP のトランザクション処理メカニズムは、データベース操作の整合性を確保するように設計されており、一連の操作を完全に実行することも、まったく実行しないこともできます。これは、トランザクションを開始し、操作を実行し、必要に応じてトランザクションをコミットまたはロールバックすることによって実現されます。トランザクションを使用すると、更新中にデータベースの一貫性を確保できます。

PHPデータベース接続におけるトランザクション処理の仕組みを詳しく解説

PHPデータベース接続におけるトランザクション処理の仕組みを詳しく解説

トランザクション処理

トランザクション処理とは、データベースの整合性を保つための一連の操作であり、データベースの整合性を確保します。 PHP では、トランザクションを使用して、一連の操作がすべて実行されるか、またはまったく実行されないかを確認できます。

トランザクション関数

トランザクションを開始するには、次の関数を使用できます:

mysqli_begin_transaction($mysqli);

トランザクションが開始されたら、操作を実行できます。すべての操作が実行された後、トランザクションはコミットまたはロールバックできます:

mysqli_commit($mysqli); //提交事务
mysqli_rollback($mysqli); //回滚事务

実際のケース

ユーザーが商品を購入できる電子商取引 Web サイトがあると仮定します。ユーザーが注文を行う場合、次の 3 つのテーブルを更新する必要があります:

  • users テーブル - ユーザー情報 users 表 - 用户信息
  • orders 表 - 订单信息
  • order_items
  • orders テーブル - 注文情報

order_itemscode> テーブル - 注文に含まれるアイテム

これら 3 つのテーブルの整合性を確保するために、注文プロセス中にトランザクション処理を使用できます:

<?php
$mysqli = new mysqli("localhost", "root", "password", "ecomm");

// 开启事务
$mysqli->begin_transaction();

try {
    // 更新 users 表
    $sql = "UPDATE users SET balance = balance - ? WHERE id = ?";
    $stmt = $mysqli->prepare($sql);
    $stmt->bind_param("di", $_POST['balance'], $_POST['user_id']);
    $stmt->execute();

    // 更新 orders 表
    $sql = "INSERT INTO orders (user_id, total_amount) VALUES (?, ?)";
    $stmt = $mysqli->prepare($sql);
    $stmt->bind_param("di", $_POST['user_id'], $_POST['total_amount']);
    $stmt->execute();

    // 更新 order_items 表
    foreach ($_POST['items'] as $item) {
        $sql = "INSERT INTO order_items (order_id, product_id, quantity, unit_price) VALUES (?, ?, ?, ?)";
        $stmt = $mysqli->prepare($sql);
        $stmt->bind_param("iiii", $last_inserted_order_id, $item['product_id'], $item['quantity'], $item['unit_price']);
        $stmt->execute();
    }

    // 提交事务
    $mysqli->commit();
    echo "Order placed successfully!";
} catch (Exception $e) {
    // 如果出现异常,回滚事务
    $mysqli->rollback();
    echo "An error occurred while placing the order.";
}
?>
上記のコードでは、最初にトランザクションを開きます。テーブルを更新するための 3 つの操作。すべての操作が成功すると、トランザクションはコミットされます。いずれかの操作が失敗すると、トランザクションはロールバックされ、ユーザーにエラー メッセージが表示されます。

注意事項

  • トランザクション処理を使用する場合は、次の点に注意する必要があります:
  • トランザクション内のすべての操作は、同じデータベース接続で実行する必要があります。
  • トランザクション内のすべての操作はアトミックである必要があります。つまり、すべてが実行されるか、まったく実行されないかのどちらかです。
🎜トランザクションはデッドロックを引き起こす可能性があるため、トランザクション処理コードを設計する際には注意が必要です。 🎜🎜

以上がPHPデータベース接続におけるトランザクション処理の仕組みを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。