Start · Sprachen · PHP · Referenz · db2_autocommit

db2_autocommit

Funktion

Liefert oder setzt den AUTOCOMMIT-Status einer IBM-DB2-Datenbankverbindung.

seit PHP 5.1.0 Kategorie: db

Signatur

db2_autocommit(resource $connection, int $value = ?): mixed

Beschreibung

db2_autocommit() ermöglicht es, den AUTOCOMMIT-Modus einer bestehenden DB2-Datenbankverbindung abzufragen oder zu ändern. Wenn nur die Verbindungsressource übergeben wird, gibt die Funktion den aktuellen AUTOCOMMIT-Status zurück. Wird zusätzlich ein Wert übergeben, wird der Modus entsprechend gesetzt.

Im AUTOCOMMIT-Modus (DB2_AUTOCOMMIT_ON) wird jede SQL-Anweisung sofort als eigenständige Transaktion festgeschrieben (commit), ohne dass ein explizites db2_commit() erforderlich ist. Dies ist die Standardeinstellung für neue Verbindungen. Wenn AUTOCOMMIT deaktiviert ist (DB2_AUTOCOMMIT_OFF), müssen Transaktionen manuell mit db2_commit() bestätigt oder mit db2_rollback() zurückgerollt werden.

Das Deaktivieren von AUTOCOMMIT ist besonders dann sinnvoll, wenn mehrere zusammenhängende Datenbankoperationen atomar ausgeführt werden sollen – also entweder alle erfolgreich abgeschlossen oder alle rückgängig gemacht werden müssen (z. B. bei Überweisungen oder mehrstufigen Bestellprozessen).

Die Funktion ist Teil der IBM DB2-, Cloudscape- und Apache Derby-Erweiterung (ibm_db2) und steht nur zur Verfügung, wenn diese Erweiterung installiert und aktiviert ist.

Parameter

Name Typ Default Beschreibung
$connection Pflicht resource Eine aktive DB2-Datenbankverbindungsressource, die von db2_connect() oder db2_pconnect() zurückgegeben wurde.
$value int Einer der Konstantenwerte DB2_AUTOCOMMIT_ON (aktiviert AUTOCOMMIT) oder DB2_AUTOCOMMIT_OFF (deaktiviert AUTOCOMMIT). Wird dieser Parameter weggelassen, gibt die Funktion den aktuellen Status zurück.

Rückgabewert

Typ
mixed
Beschreibung

Wird kein zweiter Parameter übergeben, gibt die Funktion den aktuellen AUTOCOMMIT-Status als Integer zurück: 0 bedeutet deaktiviert (DB2_AUTOCOMMIT_OFF), 1 bedeutet aktiviert (DB2_AUTOCOMMIT_ON).

Wird der zweite Parameter angegeben, gibt die Funktion true bei Erfolg zurück, andernfalls false.

Beispiele

AUTOCOMMIT-Status abfragen

<?php
$conn = db2_connect('SAMPLE', 'db2user', 'geheim');

if ($conn) {
    $status = db2_autocommit($conn);
    if ($status === DB2_AUTOCOMMIT_ON) {
        echo "AUTOCOMMIT ist aktiviert.";
    } else {
        echo "AUTOCOMMIT ist deaktiviert.";
    }
    db2_close($conn);
}
AUTOCOMMIT ist aktiviert.

Transaktion mit deaktiviertem AUTOCOMMIT

<?php
$conn = db2_connect('SAMPLE', 'db2user', 'geheim');

if ($conn) {
    // AUTOCOMMIT deaktivieren, um Transaktionskontrolle zu übernehmen
    db2_autocommit($conn, DB2_AUTOCOMMIT_OFF);

    $sql1 = "UPDATE konten SET saldo = saldo - 100 WHERE konto_id = 1";
    $sql2 = "UPDATE konten SET saldo = saldo + 100 WHERE konto_id = 2";

    $stmt1 = db2_exec($conn, $sql1);
    $stmt2 = db2_exec($conn, $sql2);

    if ($stmt1 && $stmt2) {
        // Beide Anweisungen erfolgreich: Transaktion bestätigen
        db2_commit($conn);
        echo "Überweisung erfolgreich durchgeführt.";
    } else {
        // Fehler: Transaktion zurückrollen
        db2_rollback($conn);
        echo "Fehler bei der Überweisung – Transaktion zurückgerollt.";
    }

    db2_close($conn);
}
Überweisung erfolgreich durchgeführt.

AUTOCOMMIT nach Transaktion wieder aktivieren

<?php
$conn = db2_connect('SAMPLE', 'db2user', 'geheim');

if ($conn) {
    db2_autocommit($conn, DB2_AUTOCOMMIT_OFF);
    echo "AUTOCOMMIT-Status: " . db2_autocommit($conn) . PHP_EOL; // 0

    // ... Transaktionen durchführen ...

    // AUTOCOMMIT wieder aktivieren
    db2_autocommit($conn, DB2_AUTOCOMMIT_ON);
    echo "AUTOCOMMIT-Status: " . db2_autocommit($conn) . PHP_EOL; // 1

    db2_close($conn);
}
AUTOCOMMIT-Status: 0 AUTOCOMMIT-Status: 1

// Wichtig · Fallstricke

Offene Transaktionen: Wenn AUTOCOMMIT deaktiviert ist und die Verbindung geschlossen wird, ohne dass ein db2_commit() oder db2_rollback() aufgerufen wurde, werden nicht abgeschlossene Transaktionen automatisch zurückgerollt. Stellen Sie sicher, dass Transaktionen immer explizit abgeschlossen werden.

Persistente Verbindungen: Bei der Verwendung von persistenten Verbindungen (db2_pconnect()) kann der AUTOCOMMIT-Status einer wiederverwendeten Verbindung von einer vorherigen Sitzung beeinflusst sein. Es empfiehlt sich, den Status zu Beginn jeder Sitzung explizit zu setzen.

Erweiterung erforderlich: Diese Funktion setzt die Installation der ibm_db2-Erweiterung voraus. Ohne diese Erweiterung steht db2_autocommit() nicht zur Verfügung.