Position actuelle: Accueil> Derniers articles> Comment utiliser PDO :: BeginTransaction combiné avec PDO :: Rollback pour implémenter l'opération de rétro-retour des transactions?

Comment utiliser PDO :: BeginTransaction combiné avec PDO :: Rollback pour implémenter l'opération de rétro-retour des transactions?

gitbox 2025-08-11

Dans les opérations de la base de données, la gestion des transactions est un concept très important, ce qui assure l'atomicité, la cohérence, l'isolement et la persistance des opérations de données (c'est-à-dire les caractéristiques acides). Dans PHP, nous pouvons utiliser PDO (PHP Data Objectts) pour interagir avec la base de données, tandis que la gestion des transactions peut être implémentée via les méthodes BeginTransaction () , commit () et rollback () fournies par PDO. Cet article introduira en détail comment utiliser BeginTransaction de PDO combiné avec Rollback pour implémenter l'opération de recul de transaction.

1. Qu'est-ce qu'une transaction?

La transaction fait référence à une collecte d'un ensemble d'opérations qui réussissent ou échouent. Les transactions garantissent la cohérence et l'intégrité des opérations de base de données. Dans un système de base de données, les caractéristiques de base des transactions peuvent être décrites par l'acide:

  • Atomicité : toutes les opérations d'une transaction sont terminées ou non.

  • Cohérence : l'exécution d'une transaction fera passer la base de données d'un état cohérent à un autre.

  • Isolement : lorsque plusieurs transactions sont exécutées simultanément, l'exécution d'une transaction ne doit pas être interférée par d'autres transactions.

  • Durabilité : une fois la transaction engagée, les modifications de la base de données seront enregistrées en permanence.

2. Opérations de base des transactions

En APD, les opérations de base des transactions comprennent:

  • BeginTransaction () : Démarrez la transaction.

  • commit () : commit transaction.

  • rollback () : transactions de rollback.

Généralement, pendant les opérations de la base de données, si des erreurs de pas se produisent, vous pouvez utiliser la méthode Rollback () pour rétablir la transaction et révoquer toutes les opérations précédentes.

3. Exemple utilisant BeginTransaction () et Rollback ()

Supposons que nous devons effectuer plusieurs opérations de base de données, telles que l'insertion d'enregistrements, la mise à jour des enregistrements, etc. Si l'une des opérations échoue, nous voulons être en mesure d'annuler toutes les opérations précédentes pour garantir la cohérence de la base de données. À l'heure actuelle, nous pouvons utiliser les méthodes beginTransaction () et rollback () .

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-keyword">try</span></span><span> {
    </span><span><span class="hljs-comment">// créerPDOconnecter</span></span><span>
    </span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-string">'mysql:host=localhost;dbname=testdb'</span></span><span>, </span><span><span class="hljs-string">'username'</span></span><span>, </span><span><span class="hljs-string">'password'</span></span><span>);
    </span><span><span class="hljs-comment">// Définissez le mode d&#39;erreur sur exception</span></span><span>
    </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">setAttribute</span></span><span>(PDO::</span><span><span class="hljs-variable constant_">ATTR_ERRMODE</span></span><span>, PDO::</span><span><span class="hljs-variable constant_">ERRMODE_EXCEPTION</span></span><span>);

    </span><span><span class="hljs-comment">// Démarrer une transaction</span></span><span>
    </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">beginTransaction</span></span><span>();

    </span><span><span class="hljs-comment">// Exécuter le premierSQLfonctionner</span></span><span>
    </span><span><span class="hljs-variable">$sql1</span></span><span> = </span><span><span class="hljs-string">"INSERT INTO users (username, email) VALUES ('john_doe', '[email protected]')"</span></span><span>;
    </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">exec</span></span><span>(</span><span><span class="hljs-variable">$sql1</span></span><span>);

    </span><span><span class="hljs-comment">// Exécuter le secondSQLfonctionner</span></span><span>
    </span><span><span class="hljs-variable">$sql2</span></span><span> = </span><span><span class="hljs-string">"UPDATE accounts SET balance = balance - 100 WHERE username = 'john_doe'"</span></span><span>;
    </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">exec</span></span><span>(</span><span><span class="hljs-variable">$sql2</span></span><span>);

    </span><span><span class="hljs-comment">// Si tout va bien,Soumettre les transactions</span></span><span>
    </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">commit</span></span><span>();
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Soumission de transaction réussie!"</span></span><span>;

} </span><span><span class="hljs-keyword">catch</span></span><span> (</span><span><span class="hljs-built_in">Exception</span></span><span> </span><span><span class="hljs-variable">$e</span></span><span>) {
    </span><span><span class="hljs-comment">// Si une erreur se produit,Transactions en arrière</span></span><span>
    </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">rollBack</span></span><span>();
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Rollback des transactions:"</span></span><span>, </span><span><span class="hljs-variable">$e</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

4. Expliquez le flux de code

  1. Établir une connexion PDO : Tout d'abord, nous nous connectons à la base de données MySQL via PDO et définissons le mode d'erreur sur PDO :: errmode_exception afin qu'une exception soit lancée lorsqu'une erreur se produit.

  2. Démarrer une transaction : en appelant $ PDO-> beginTransaction () , nous disons à PDO de démarrer une transaction. À l'heure actuelle, toutes les opérations de base de données sont sous la gestion des transactions. Si une opération échoue, d'autres opérations ne seront pas soumises.

  3. Effectuer des opérations SQL :

    • La première opération SQL consiste à insérer un enregistrement utilisateur.

    • La deuxième opération SQL consiste à mettre à jour le solde d'un compte utilisateur.

  4. Commission Transaction : si toutes les opérations sont réussies, nous soumettons la transaction en appelant $ pDo-> commit () pour enregistrer en permanence toutes les opérations dans la base de données.

  5. Transaction de retour : Si une exception se produit pendant l'exécution (comme la deuxième opération SQL échoue), le code du bloc Catch sera déclenché, et $ pDo-> rollback () sera appelé pour la transaction Rollback, et toutes les opérations non engagées seront annulées.

5. Choses à noter

  • Atomicité des transactions : Après avoir utilisé BeginTransaction () , toutes les opérations de base de données seront traitées dans son ensemble. Si une erreur se produit, Rollback () peut révoquer l'intégralité de la transaction pour garantir la cohérence des données.

  • Gestion des exceptions : assurez-vous d'utiliser le bloc d'essai pour capter des exceptions pour vous assurer que les transactions peuvent être rétablies dans le temps lorsque l'opération échoue.

  • Opérations de transaction multiples : lors de l'exécution de plusieurs opérations dans une transaction, toutes les opérations prendront effet tant qu'aucune erreur ne se produira avant le engagement de la transaction.

6. Résumé

Grâce aux méthodes de débutTransaction () et de rollback () de PDO, nous pouvons gérer efficacement les transactions en PHP et effectuer des opérations de recul des transactions lorsque des erreurs se produisent pour garantir l'atomicité et la cohérence des opérations de base de données. Cette méthode est très utile dans les scénarios où plusieurs opérations de base de données sont nécessaires, en particulier lors de la gestion des opérations sensibles telles que les transactions de fonds et le traitement des commandes. Rollback des transactions peut éviter les incohérences de données.

  • Étiquettes associées:

    PDO