Maison >développement back-end >tutoriel php >Explication détaillée du mécanisme de traitement des transactions dans la connexion à la base de données PHP

Explication détaillée du mécanisme de traitement des transactions dans la connexion à la base de données PHP

WBOY
WBOYoriginal
2024-06-02 18:17:00775parcourir

Le mécanisme de traitement des transactions en PHP est conçu pour garantir l'intégrité des opérations de base de données. Il permet d'exécuter un ensemble d'opérations dans leur intégralité ou aucune. Ceci est accompli en démarrant une transaction, en effectuant des opérations et en validant ou en annulant la transaction, selon le cas. En utilisant des transactions, vous pouvez garantir que la base de données reste cohérente lors des mises à jour.

Explication détaillée du mécanisme de traitement des transactions dans la connexion à la base de données PHP

Explication détaillée du mécanisme de traitement des transactions dans la connexion à la base de données PHP

Traitement des transactions

Le traitement des transactions est une série d'opérations qui maintiennent l'intégrité de la base de données, ce qui garantit la cohérence de la base de données. En PHP, vous pouvez utiliser des transactions pour garantir que tout ou rien d'un ensemble d'opérations est effectué.

Fonctions de transaction

Pour démarrer une transaction, vous pouvez utiliser la fonction suivante :

mysqli_begin_transaction($mysqli);

Une fois la transaction démarrée, vous pouvez effectuer des opérations. Une fois toutes les opérations effectuées, la transaction peut être validée ou annulée :

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

Cas pratique

Supposons que nous ayons un site Web de commerce électronique via lequel les utilisateurs peuvent acheter des biens. Lorsqu'un utilisateur passe une commande, les trois tableaux suivants doivent être mis à jour :

  • Tableau utilisateurs - informations sur l'utilisateur users 表 - 用户信息
  • orders 表 - 订单信息
  • order_items
  • Tableau commandes - informations sur la commande

order_itemscode> Table - Articles inclus dans la commande

Afin d'assurer l'intégrité de ces trois tables, nous pouvons utiliser le traitement des transactions pendant le processus de commande :

<?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.";
}
?>
Dans le code ci-dessus, nous ouvrons d'abord une transaction puis essayez de l'exécuter Trois opérations pour mettre à jour la table. Si toutes les opérations réussissent, la transaction est validée. Si l'une des opérations échoue, la transaction est annulée et un message d'erreur s'affiche à l'utilisateur.

Remarques

  • Lors de l'utilisation du traitement des transactions, vous devez faire attention aux points suivants :
  • Toutes les opérations d'une transaction doivent être effectuées dans la même connexion à la base de données.
  • Toutes les opérations au sein d'une transaction doivent être atomiques, ce qui signifie qu'elles sont soit toutes exécutées, soit aucune.
🎜Les transactions peuvent provoquer des blocages, il faut donc être prudent lors de la conception du code de traitement des transactions. 🎜🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn