Aktueller Standort: Startseite> Neueste Artikel> Analyse der Beziehung zwischen PDO :: BeginnTransaction und Automatik -Einreichungsmodus

Analyse der Beziehung zwischen PDO :: BeginnTransaction und Automatik -Einreichungsmodus

gitbox 2025-05-28

Transaktion ist einer der Schlüsselmechanismen, um die Datenkonsistenz und Integrität bei der Verwendung von PHP -PDO (PHP -Datenobjekten) für Datenbankoperationen zu gewährleisten. Pdo :: begintransaction () ist eine gemeinsame Methode, um Transaktionen zu starten. Viele Entwickler werden sich fragen, wann sie Anfänger sind. Was hat diese Funktion mit dem sogenannten "AutoCommit-Modus" zu tun? In diesem Artikel wird die Verbindung zwischen den beiden Tiefen untersucht und anhand von Beispielen ausführlich analysiert.

Einführung in den Automatikmodus

In den meisten Datenbanken (wie MySQL) wird standardmäßig jede unabhängig ausgeführte SQL -Anweisung als unabhängige Transaktion ausgeführt und automatisch verpflichtet. Dieses Verhalten wird AutoCommit genannt. Mit anderen Worten, wenn Sie eine Transaktion unbekannt starten, speichert die Datenbank das Ergebnis der Operation sofort, nachdem Sie eine Anweisung einfügen , aktualisieren oder löschen .

Pdo :: begintransaction () verhalten

Wenn Sie PDO :: BeginnTransaction () anrufen, schaltet PDO automatisch den aktuellen Auto-Commit-Modus aus und startet eine neue Transaktion. Zu diesem Zeitpunkt werden alle nachfolgenden Schreibvorgänge zur Datenbank (z. B. einfügen , aktualisieren , löschen ) nicht sofort eingereicht, wenn Sie PDO :: commit () oder pdo :: rollback () ausdrücklich anrufen. Mit anderen Worten, die Funktion dieser Funktion besteht darin, "automatische Einreichung auszuschalten und manuelle Einreichung zu aktivieren".

Hier ist die Kernbeziehung zum automatischen Einreichungsmuster:

  • Wenn begintransaction () nicht aufgerufen wird : sofort nach der Ausführung jeder Anweisung einreichen (der Automatikmodus ist aktiviert).

  • Nach dem Aufrufen von begintransaction () : deaktivieren Sie den Automatik -Einreichungsmodus und geben Sie den Transaktionsregelungszustand ein.

Es ist erwähnenswert, dass PDO nach Ausführung der Transaktion (ob commesent () oder rollback () ) die Verbindung zum automatischen Komit -Modus normalerweise automatisch wiederherstellt, damit nachfolgende Aussagen weiterhin als Standardverhalten ausgeführt werden können.

Probe Demo

 <?php
try {
    $pdo = new PDO("mysql:host=localhost;dbname=testdb", "username", "password");
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // Starten Sie eine Transaktion,Die Automatikübermittlung ist geschlossen
    $pdo->beginTransaction();

    // Fügen Sie den ersten Datensatz ein
    $pdo->exec("INSERT INTO users (name, email) VALUES ('Alice', '[email protected]')");

    // Fügen Sie den zweiten Datensatz ein
    $pdo->exec("INSERT INTO users (name, email) VALUES ('Bob', '[email protected]')");

    // Transaktionen einreichen
    $pdo->commit();
    echo "Daten wurden erfolgreich geschrieben。";

} catch (Exception $e) {
    $pdo->rollBack(); // Wenn es eine Ausnahme gibt,Rollen Sie Transaktionen zurück
    echo "Transaktion fehlgeschlagen:" . $e->getMessage();
}
?>

Im obigen Code wird der eingefügte Datensatz tatsächlich erst nach erfolgreicher Aufforderung an die Datenbank geschrieben. Wenn eine Ausnahme auf halbem Weg eintritt, wird Rollback () alle nicht verbindlichen Änderungen rückgängig machen. Der gesamte Vorgang tritt auf, wenn der automatische Einreichungsmodus ausgeschaltet ist.

Verhaltensbeobachtung nach Aufruf von Transaktionsfunktionen

Sie können Änderungen im automatischen Einreichungsmuster durch SQL -Anweisungen beobachten:

 $pdo->query("SELECT @@autocommit")->fetchColumn(); // zurückkehren 1 Zeigt auf,0 Zeigt in der Nähe an

Nach der Ausführung von begintransaction () kann das Ausführen der Abfrage 0 zurückgeben, was darauf hinweist, dass die Automatikübermittlung geschlossen ist. Dieser Zustand dauert bis nach der Transaktion.

Unterschiede von pdo :: setAttribute (pdo :: attr_autocommit, falsch)

Obwohl in einigen Treibern Sie PDO :: setAttribute () verwenden können, um den automatischen Zustand festzulegen, zum Beispiel:

 $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, false);

Dies wird jedoch aus zwei Gründen nicht empfohlen:

  1. Nicht alle PDO -Fahrer unterstützen diese Eigenschaft, und eine unsachgemäße Verwendung kann Kompatibilitätsprobleme verursachen.

  2. Es wird empfohlen, Standard-Transaktions-APIs (d. H. BeginnTransaction () , Commit () , Rollback () ) zu verwenden, um den Transaktionszustand zu verwalten, um eine plattformübergreifende Konsistenz sicherzustellen.

Zusammenfassen

  • Die Funktion von pdo :: begintransaction () besteht darin, den automatischen Komit -Modus auszuschalten und Transaktionen manuell zu verwalten.

  • Der automatische Commit -Modus ist standardmäßig aktiviert, wenn keine Transaktion verwendet wird.

  • Sobald Commit () oder Rollback () aufgerufen wird, werden die Transaktion und automatische Commits normalerweise wieder aufgenommen.

  • Die Verwendung von Transaktionen kann die Sicherheit und Konsistenz von Datenvorgängen verbessern, insbesondere in Szenarien, in denen mehrere Schreibvorgänge "alle erfolgreich oder alle fehlgeschlagen" sein müssen.

Das Verständnis der Beziehung zwischen begintransaction () und automatischer Einreichung hilft Ihnen, einen robusteren und kontrollierbaren Datenbankoperationscode zu schreiben. Denken Sie daran, Transaktionen sind keine Feinde der Leistung, sondern den Schutz der Datenkorrektheit der Daten.