Indique le type de marqueur list-item
Apprenez à implémenter des transactions dans MySQL en utilisant PHP et la fonction mysqli_begin_transaction(). Suivez nos exemples pour des opérations de base de données sécurisées.
Version PHP: 5.5.0 et +
La fonction mysqli_begin_transaction() est utilisée en PHP avec MySQLi pour démarrer une transaction. Une transaction permet d'exécuter un groupe d'instructions SQL de manière atomique, ce qui signifie qu'elles sont soit toutes exécutées, soit aucune ne l'est, assurant ainsi la cohérence des données.
Il existe deux façons d'utiliser la fonction mysqli_begin_transaction() : orientée objet et procédurale.
$mysqli = new mysqli("localhost", "nom_utilisateur", "mot_de_passe", "ma_base_de_données"); // Vérification de la connexion if ($mysqli->connect_error) { die("Connexion échouée : " . $mysqli->connect_error); } // Démarrer la transaction $mysqli->begin_transaction();
$mysqli = mysqli_connect("localhost", "nom_utilisateur", "mot_de_passe", "ma_base_de_données"); // Vérification de la connexion if (!$mysqli) { die("Connexion échouée : " . mysqli_connect_error()); } // Démarrer la transaction mysqli_begin_transaction($mysqli);
La fonction mysqli_begin_transaction() prend un paramètre optionnel pour définir les options de transaction. Les valeurs possibles pour ce paramètre sont :
Exemple : 📋 Copier le code
$mysqli = new mysqli("localhost", "nom_utilisateur", "mot_de_passe", "ma_base_de_données"); if ($mysqli->connect_error) { die("Connexion échouée : " . $mysqli->connect_error); } $mysqli->begin_transaction(MYSQLI_TRANS_START_READ_ONLY); // ... Effectuer des opérations SQL ... $mysqli->commit(); // Valider les modifications
Exemple : 📋 Copier le code
$mysqli = mysqli_connect("localhost", "nom_utilisateur", "mot_de_passe", "ma_base_de_données"); if (!$mysqli) { die("Connexion échouée : " . mysqli_connect_error()); } mysqli_begin_transaction($mysqli, MYSQLI_TRANS_START_READ_WRITE); // ... Effectuer des opérations SQL ... mysqli_commit($mysqli); // Valider les modifications
Voici quelques exemples pratiques supplémentaires pour illustrer l'utilisation de la fonction mysqli_begin_transaction() en PHP :
Exemple : 📋 Copier le code
$mysqli = new mysqli("localhost", "nom_utilisateur", "mot_de_passe", "ma_base_de_données"); if ($mysqli->connect_error) { die("Connexion échouée : " . $mysqli->connect_error); } // Début de la transaction $mysqli->begin_transaction(); try { // Déduction d'argent du compte A $mysqli->query("UPDATE comptes SET solde = solde - 500 WHERE id = 1"); // Ajout d'argent au compte B $mysqli->query("UPDATE comptes SET solde = solde + 500 WHERE id = 2"); // Validation des modifications $mysqli->commit(); echo "Transfert d'argent réussi !"; } catch (Exception $e) { // En cas d'erreur, annuler la transaction $mysqli->rollback(); echo "Erreur : Transfert d'argent annulé."; }
Cet exemple illustre comment utiliser mysqli_begin_transaction() pour réaliser un transfert d'argent sécurisé entre deux comptes bancaires.
Exemple : 📋 Copier le code
$mysqli = new mysqli("localhost", "nom_utilisateur", "mot_de_passe", "ma_base_de_données"); if ($mysqli->connect_error) { die("Connexion échouée : " . $mysqli->connect_error); } // Liste des produits commandés $commandes = array( array("produit_id" => 1, "quantite" => 3), array("produit_id" => 2, "quantite" => 2) ); $transaction_success = true; // Début de la transaction $mysqli->begin_transaction(); try { foreach ($commandes as $commande) { $produit_id = $commande["produit_id"]; $quantite = $commande["quantite"]; // Vérifier si le stock est suffisant $result = $mysqli->query("SELECT stock FROM produits WHERE id = $produit_id"); $row = $result->fetch_assoc(); $stock_disponible = $row["stock"]; if ($stock_disponible >= $quantite) { // Enregistrer la commande $mysqli->query("INSERT INTO commandes (produit_id, quantite) VALUES ($produit_id, $quantite)"); // Mettre à jour le stock $mysqli->query("UPDATE produits SET stock = stock - $quantite WHERE id = $produit_id"); } else { // Le stock est insuffisant $transaction_success = false; break; } } if ($transaction_success) { // Validation des modifications $mysqli->commit(); echo "Commande enregistrée avec succès !"; } else { // En cas de stock insuffisant, annuler la transaction $mysqli->rollback(); echo "Erreur : Stock insuffisant. Commande annulée."; } } catch (Exception $e) { // En cas d'erreur, annuler la transaction $mysqli->rollback(); echo "Erreur : Commande annulée."; }
Cet exemple montre comment mysqli_begin_transaction() peut être utilisé pour enregistrer des commandes de produits tout en vérifiant si le stock est suffisant.
Ces deux exemples mettent en évidence l'importance des transactions pour garantir que les opérations complexes sont exécutées avec cohérence et intégrité, et comment mysqli_begin_transaction() facilite la gestion de ces scénarios dans PHP.
En utilisant la fonction mysqli_begin_transaction() de PHP, vous pouvez gérer efficacement les transactions pour assurer l'intégrité et la cohérence de vos données dans les bases de données MySQL.