Aktueller Standort: Startseite> Neueste Artikel> Wie verwendet ich PDO :: BeginnTransaction in Kombination mit PDO :: Rollback, um den Transaktions -Rollback -Betrieb zu implementieren?

Wie verwendet ich PDO :: BeginnTransaction in Kombination mit PDO :: Rollback, um den Transaktions -Rollback -Betrieb zu implementieren?

gitbox 2025-08-11

In Datenbankoperationen ist das Transaktionsmanagement ein sehr wichtiges Konzept, das die Atomizität, Konsistenz, Isolierung und Persistenz von Datenoperationen (d. H. Säureeigenschaften) sicherstellt. In PHP können wir PDO (PHP -Datenobjekte) verwenden, um mit der Datenbank zu interagieren, während das Transaktionsmanagement über die von PDO bereitgestellten Methoden mit begintransaktion () , commit () und rollback () implementiert werden kann. In diesem Artikel wird detailliert vorgestellt, wie die PDO -Starttransaktion in Kombination mit Rollback verwendet wird, um den Transaktions -Rollback -Betrieb zu implementieren.

1. Was ist eine Transaktion?

Transaktion bezieht sich auf eine Sammlung einer Reihe von Operationen, die entweder erfolgreich sind oder scheitern. Transaktionen gewährleisten die Konsistenz und Integrität von Datenbankvorgängen. In einem Datenbanksystem können die grundlegenden Eigenschaften von Transaktionen durch Säure beschrieben werden:

  • Atomizität : Alle Operationen in einer Transaktion sind entweder abgeschlossen oder nicht durchgeführt.

  • Konsistenz : Die Ausführung einer Transaktion führt dazu, dass die Datenbank von einem konsistenten Zustand in einen anderen übergeht.

  • Isolierung : Wenn mehrere Transaktionen gleichzeitig ausgeführt werden, sollte die Ausführung einer Transaktion nicht durch andere Transaktionen gestört werden.

  • Haltbarkeit : Sobald eine Transaktion festgelegt ist, werden Änderungen an der Datenbank dauerhaft gespeichert.

2. Grundlegende Transaktionenbetriebe

Zu den PDOs gehören die grundlegenden Transaktionenoperationen:

  • begintransaktion () : Starten Sie die Transaktion.

  • Commit () : Transaktion begehen.

  • Rollback () : Rollback -Transaktionen.

Im Allgemeinen können Sie während der Datenbankoperation, wenn ein Schrittfehler auftritt, mit der Methode Rollback () die Transaktion zur Rollback und den Widerruf aller früheren Vorgänge verwenden.

3. Beispiel unter Verwendung von begintransaction () und rollback ()

Angenommen, wir müssen mehrere Datenbankvorgänge ausführen, z. B. Einfügen von Datensätzen, Aktualisierung von Datensätzen usw. Wenn einer der Vorgänge fehlschlägt, möchten wir in der Lage sein, alle früheren Vorgänge rückgängig zu machen, um die Datenbankkonsistenz sicherzustellen. Zu diesem Zeitpunkt können wir die Methoden mit BeginnTransaction () und Rollback () verwenden.

 <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">// erstellenPDOverbinden</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">// Stellen Sie den Fehlermodus auf eine Ausnahme ein</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">// Starten Sie eine Transaktion</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">// Führen Sie den ersten ausSQLarbeiten</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">// Die zweite ausführenSQLarbeiten</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">// Wenn alles in Ordnung ist,Transaktionen einreichen</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">"Transaktionseinreichung erfolgreich!"</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">// Wenn ein Fehler auftritt,Rollen Sie Transaktionen zurück</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">"Transaktionsrollback:"</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. Erklären Sie den Codefluss

  1. Stellen Sie eine PDO -Verbindung her : Erstens stellen wir eine Verbindung zur MySQL -Datenbank über PDO her und setzen den Fehlermodus auf pdo :: errmode_exception, damit eine Ausnahme ausgelöst wird, wenn ein Fehler auftritt.

  2. Starten Sie eine Transaktion : Durch Aufrufen von $ pdo-> begintransaktion () sagen wir PDO, eine Transaktion zu starten. Zu diesem Zeitpunkt stehen alle Datenbankoperationen unter Transaktionsmanagement. Wenn eine Operation fehlschlägt, werden andere Operationen nicht eingereicht.

  3. SQL -Operationen durchführen :

    • Die erste SQL -Operation besteht darin, einen Benutzerdatensatz einzufügen.

    • Die zweite SQL -Operation besteht darin, den Restbetrag eines Benutzerkontos zu aktualisieren.

  4. Commit-Transaktion : Wenn alle Vorgänge erfolgreich sind, senden wir die Transaktion, indem wir $ pdo-> commit () aufrufen, um alle Vorgänge dauerhaft in der Datenbank zu speichern.

  5. Rollback-Transaktion : Wenn eine Ausnahme während der Ausführung auftritt (wie der zweite SQL-Vorgang fällt), wird der Code im Catch -Block ausgelöst und $ pdo-> rollback () wird nach Transaktionsrollback gefordert, und alle unbekannten Operationen werden storniert.

5. Dinge zu beachten

  • Atomizität von Transaktionen : Nach der Verwendung von begintransaktion () werden alle Datenbankoperationen als Ganzes behandelt. Wenn ein Fehler auftritt, kann Rollback () die gesamte Transaktion widerrufen, um die Datenkonsistenz sicherzustellen.

  • Ausnahmebehandlung : Verwenden Sie unbedingt den Try-Catch -Block, um Ausnahmen zu fangen, um sicherzustellen, dass Transaktionen in der Zeit zurückversetzt werden können, wenn der Betrieb ausfällt.

  • Mehrere Transaktionsvorgänge : Bei der Durchführung mehrerer Operationen in einer Transaktion werden alle Vorgänge wirksam, solange kein Fehler aufgetreten ist, bevor die Transaktion festgelegt wird.

6. Zusammenfassung

Durch die Methoden von PDOs BeginnTransaction () und Rollback () können wir Transaktionen in PHP effizient verwalten und Transaktionsrollback -Operationen durchführen, wenn Fehler auftreten, um die Atomizität und Konsistenz von Datenbankoperationen sicherzustellen. Diese Methode ist sehr nützlich in Szenarien, in denen mehrere Datenbankvorgänge erforderlich sind, insbesondere bei der Behandlung sensibler Vorgänge wie Fondstransaktionen und Auftragsverarbeitung. Transaktionsrollback kann Datenkonsistenzen vermeiden.

  • Verwandte Tags:

    PDO