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