Signatur
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
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);
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);
}
// 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.