Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penjelasan terperinci mengenai mekanisme pemprosesan transaksi dalam sambungan pangkalan data PHP

Penjelasan terperinci mengenai mekanisme pemprosesan transaksi dalam sambungan pangkalan data PHP

WBOY
WBOYasal
2024-06-02 18:17:00732semak imbas

Mekanisme pemprosesan transaksi dalam PHP direka untuk memastikan integriti operasi pangkalan data Ia membolehkan satu set operasi dilaksanakan sepenuhnya atau tidak. Ini dicapai dengan memulakan urus niaga, melaksanakan operasi dan melakukan atau melancarkan semula urus niaga mengikut kesesuaian. Dengan menggunakan transaksi, anda boleh memastikan bahawa pangkalan data kekal konsisten semasa kemas kini.

Penjelasan terperinci mengenai mekanisme pemprosesan transaksi dalam sambungan pangkalan data PHP

Penjelasan terperinci tentang mekanisme pemprosesan transaksi dalam sambungan pangkalan data PHP

Pemprosesan transaksi

Pemprosesan transaksi ialah satu siri operasi yang mengekalkan integriti pangkalan data, yang memastikan ketekalan pangkalan data. Dalam PHP, anda boleh menggunakan transaksi untuk memastikan sama ada semua atau tiada satu set operasi dilakukan.

Fungsi Transaksi

Untuk memulakan transaksi, anda boleh menggunakan fungsi berikut:

mysqli_begin_transaction($mysqli);

Setelah transaksi bermula, anda boleh melakukan operasi. Selepas semua operasi dilakukan, urus niaga boleh dilakukan atau ditarik balik:

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

Kes praktikal

Katakan kita mempunyai laman web e-dagang di mana pengguna boleh membeli barangan. Apabila pengguna membuat pesanan, tiga jadual berikut perlu dikemas kini:

  • jadual - maklumat pengguna users 表 - 用户信息
  • orders 表 - 订单信息
  • order_items
  • pesanan jadual - maklumat pesanan

pesanan_itemkod> Jadual - Item termasuk dalam pesanan

Untuk memastikan integriti ketiga-tiga jadual ini, kami boleh menggunakan pemprosesan transaksi semasa proses pesanan:

<?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.";
}
?>
Dalam kod di atas, kami mula-mula membuka transaksi dan kemudian cuba laksanakannya Tiga operasi untuk mengemas kini jadual. Jika semua operasi berjaya, transaksi dilakukan. Jika salah satu daripada operasi gagal, urus niaga akan ditarik balik dan mesej ralat dipaparkan kepada pengguna.

Nota

  • Apabila menggunakan pemprosesan transaksi, anda perlu memberi perhatian kepada perkara berikut:
  • Semua operasi dalam transaksi mesti dilakukan dalam sambungan pangkalan data yang sama.
  • Semua operasi dalam urus niaga mestilah bersifat atom, bermakna semuanya dilaksanakan atau tiada.
🎜Transaksi boleh menyebabkan kebuntuan, jadi berhati-hati perlu diambil semasa mereka bentuk kod pemprosesan transaksi. 🎜🎜

Atas ialah kandungan terperinci Penjelasan terperinci mengenai mekanisme pemprosesan transaksi dalam sambungan pangkalan data PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn