Start · Sprachen · PHP · Referenz · odbc_autocommit

odbc_autocommit

Funktion

Gibt den aktuellen Autocommit-Status einer ODBC-Verbindung zurück oder ändert ihn.

seit PHP 4.0.0 Kategorie: db

Signatur

odbc_autocommit(resource $odbc, bool|null $enable = null): bool|int

Beschreibung

odbc_autocommit steuert das Autocommit-Verhalten einer aktiven ODBC-Datenbankverbindung. Standardmäßig ist Autocommit bei ODBC-Verbindungen aktiviert, was bedeutet, dass jede SQL-Anweisung sofort und unwiderruflich in die Datenbank geschrieben wird.

Wird enable weggelassen oder auf null gesetzt, gibt die Funktion den aktuellen Autocommit-Status zurück: 1 wenn aktiviert, 0 wenn deaktiviert. Wird ein bool-Wert übergeben, wird Autocommit entsprechend ein- oder ausgeschaltet.

Deaktiviert man Autocommit (false), arbeitet die Verbindung im manuellen Transaktionsmodus. Änderungen werden erst dauerhaft übernommen, wenn odbc_commit aufgerufen wird, oder mit odbc_rollback verworfen. Dies ist essenziell für Szenarien, in denen mehrere zusammenhängende SQL-Operationen entweder alle gemeinsam oder gar nicht ausgeführt werden sollen (Atomarität).

Die Funktion ist besonders nützlich bei komplexen Geschäftsprozessen wie Bestellvorgängen, Buchungssystemen oder Banktransaktionen, bei denen Datenkonsistenz oberste Priorität hat.

Parameter

Name Typ Default Beschreibung
$odbc Pflicht resource Eine aktive ODBC-Verbindungsressource, die zuvor mit odbc_connect oder odbc_pconnect erstellt wurde.
$enable bool|null null Wenn true, wird Autocommit aktiviert; wenn false, wird es deaktiviert. Wird null übergeben oder der Parameter weggelassen, wird der aktuelle Status abgefragt statt gesetzt.

Rückgabewert

Typ
bool|int
Beschreibung
Wenn enable angegeben wird: true bei Erfolg, false bei Fehler. Wenn enable weggelassen oder null ist: 1 wenn Autocommit aktiviert ist, 0 wenn deaktiviert. Im Fehlerfall wird false zurückgegeben.

Beispiele

Autocommit-Status abfragen

<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'passwort');

if ($conn === false) {
    die('Verbindung fehlgeschlagen');
}

$status = odbc_autocommit($conn);
echo 'Autocommit ist: ' . ($status ? 'aktiviert' : 'deaktiviert') . PHP_EOL;

odbc_close($conn);
Autocommit ist: aktiviert

Manuelle Transaktion mit Commit und Rollback

<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'passwort');

if ($conn === false) {
    die('Verbindung fehlgeschlagen');
}

// Autocommit deaktivieren — Transaktionsmodus aktivieren
odbc_autocommit($conn, false);

try {
    odbc_exec($conn, "INSERT INTO konten (id, betrag) VALUES (1, 500.00)");
    odbc_exec($conn, "UPDATE konten SET betrag = betrag - 500.00 WHERE id = 2");

    // Beide Operationen gemeinsam übernehmen
    odbc_commit($conn);
    echo 'Transaktion erfolgreich durchgeführt.' . PHP_EOL;
} catch (Exception $e) {
    // Bei Fehler: alle Änderungen rückgängig machen
    odbc_rollback($conn);
    echo 'Fehler – Transaktion zurückgerollt: ' . $e->getMessage() . PHP_EOL;
} finally {
    // Autocommit wieder aktivieren
    odbc_autocommit($conn, true);
    odbc_close($conn);
}
Transaktion erfolgreich durchgeführt.

// Wichtig · Fallstricke

Wichtig: Nicht alle ODBC-Treiber und Datenbanksysteme unterstützen Transaktionen. Wird Autocommit auf einer Verbindung deaktiviert, die keine Transaktionen unterstützt, kann dies zu unerwartetem Verhalten oder Fehlern führen. Prüfen Sie die Dokumentation des jeweiligen ODBC-Treibers.

Wird eine Verbindung geschlossen (odbc_close), ohne einen offenen Transaktionszustand mit odbc_commit oder odbc_rollback abzuschließen, ist das Verhalten treiberabhängig — manche Treiber führen einen automatischen Rollback durch, andere einen impliziten Commit. Schließen Sie Transaktionen daher stets explizit ab.

Ab PHP 8.0 wurde die Parameterreihenfolge und Typdeklaration präzisiert. Bei älteren PHP-Versionen kann das Verhalten bei Übergabe von null abweichen.