>백엔드 개발 >PHP 튜토리얼 >PHP 데이터베이스 연결의 트랜잭션 처리 메커니즘에 대한 자세한 설명

PHP 데이터베이스 연결의 트랜잭션 처리 메커니즘에 대한 자세한 설명

WBOY
WBOY원래의
2024-06-02 18:17:00774검색

PHP의 트랜잭션 처리 메커니즘은 데이터베이스 작업의 무결성을 보장하도록 설계되었습니다. 이를 통해 일련의 작업을 완전히 실행하거나 전혀 실행할 수 없습니다. 이는 트랜잭션을 시작하고, 작업을 수행하고, 적절하게 트랜잭션을 커밋하거나 롤백함으로써 수행됩니다. 트랜잭션을 사용하면 업데이트 중에 데이터베이스의 일관성을 유지할 수 있습니다.

PHP 데이터베이스 연결의 트랜잭션 처리 메커니즘에 대한 자세한 설명

PHP 데이터베이스 연결의 트랜잭션 처리 메커니즘에 대한 자세한 설명

트랜잭션 처리

트랜잭션 처리는 데이터베이스의 무결성을 유지하는 일련의 작업으로, 데이터베이스의 일관성을 보장합니다. PHP에서는 트랜잭션을 사용하여 일련의 작업이 모두 수행되거나 전혀 수행되지 않도록 할 수 있습니다.

거래 기능

거래를 시작하려면 다음 기능을 사용할 수 있습니다.

mysqli_begin_transaction($mysqli);

거래가 시작되면 작업을 수행할 수 있습니다. 모든 작업이 수행된 후 트랜잭션이 커밋되거나 롤백될 수 있습니다.

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

실제 사례

사용자가 상품을 구매할 수 있는 전자상거래 웹사이트가 있다고 가정합니다. 사용자가 주문을 하면 다음 세 가지 테이블을 업데이트해야 합니다.

  • users 테이블 - 사용자 정보 users 表 - 用户信息
  • orders 表 - 订单信息
  • order_items
  • orders 테이블 - 주문 정보

order_itemscode> 테이블 - 주문에 포함된 항목

이 세 테이블의 무결성을 보장하기 위해 주문 프로세스 중에 트랜잭션 처리를 사용할 수 있습니다.

<?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.";
}
?>
위 코드에서는 먼저 트랜잭션을 엽니다. 그런 다음 실행해 보십시오. 테이블을 업데이트하는 세 가지 작업이 있습니다. 모든 작업이 성공하면 트랜잭션이 커밋됩니다. 작업 중 하나가 실패하면 트랜잭션이 롤백되고 사용자에게 오류 메시지가 표시됩니다.

Notes

  • 트랜잭션 처리를 사용할 때 다음 사항에 주의해야 합니다.
  • 트랜잭션의 모든 작업은 동일한 데이터베이스 연결에서 수행되어야 합니다.
  • 트랜잭션 내의 모든 작업은 원자성이어야 합니다. 즉, 모두 실행되거나 전혀 실행되지 않습니다.
🎜트랜잭션으로 인해 교착 상태가 발생할 수 있으므로 트랜잭션 처리 코드를 설계할 때 주의가 필요합니다. 🎜🎜

위 내용은 PHP 데이터베이스 연결의 트랜잭션 처리 메커니즘에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.