Start · Sprachen · PHP · Referenz · oci_close

oci_close

Funktion

Schließt eine Oracle-Datenbankverbindung und gibt die zugehörigen Ressourcen frei.

seit PHP 5.0.0 Kategorie: db

Signatur

oci_close(resource $connection): bool

Beschreibung

oci_close() schließt eine Oracle-Verbindung, die zuvor mit oci_connect(), oci_pconnect() oder oci_new_connect() geöffnet wurde. Die Funktion verringert den internen Referenzzähler der Verbindungsressource; erst wenn der Zähler auf null fällt, wird die Verbindung tatsächlich zum Oracle-Server getrennt.

Bei persistenten Verbindungen (oci_pconnect()) wird die Verbindung nicht wirklich geschlossen, sondern lediglich in den Verbindungspool zurückgestellt und für spätere Anfragen wiederverwendet. oci_close() hat in diesem Fall nur die Wirkung, den Referenzzähler zu dekrementieren.

Es ist gute Praxis, Datenbankverbindungen explizit zu schließen, sobald sie nicht mehr benötigt werden. Gerade bei Anwendungen mit vielen gleichzeitigen Anfragen verhindert dies das Erschöpfen des Oracle-Verbindungspools. Alle noch offenen Statements einer Verbindung sollten vor dem Schließen ebenfalls mit oci_free_statement() freigegeben werden.

Wird oci_close() nicht explizit aufgerufen, schließt PHP die Verbindung automatisch am Ende des Skripts. Für langlebige Skripte oder Skripte mit hohem Verbindungsaufkommen empfiehlt sich jedoch der explizite Aufruf.

Parameter

Name Typ Default Beschreibung
$connection Pflicht resource Eine gültige Oracle-Verbindungsressource, die von oci_connect(), oci_pconnect() oder oci_new_connect() zurückgegeben wurde.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück. Gibt false zurück, wenn die übergebene Ressource keine gültige Oracle-Verbindung ist oder bereits geschlossen wurde.

Beispiele

Einfaches Öffnen und Schließen einer Oracle-Verbindung

<?php
$conn = oci_connect('hr', 'welcome', 'localhost/XE');

if (!$conn) {
    $e = oci_error();
    trigger_error(htmlspecialchars($e['message']), E_USER_ERROR);
}

// Datenbankoperationen durchführen
$stid = oci_parse($conn, 'SELECT * FROM employees WHERE rownum <= 5');
oci_execute($stid);

while ($row = oci_fetch_array($stid, OCI_ASSOC + OCI_RETURN_NULLS)) {
    echo $row['FIRST_NAME'] . ' ' . $row['LAST_NAME'] . PHP_EOL;
}

// Statement und Verbindung explizit freigeben
oci_free_statement($stid);
oci_close($conn);

echo 'Verbindung erfolgreich geschlossen.' . PHP_EOL;
Steven King Neena Kochhar Lex De Haan Alexander Hunold Bruce Ernst Verbindung erfolgreich geschlossen.

Mehrfache Verbindungsreferenzen und Referenzzähler

<?php
// oci_connect() gibt bei gleichen Parametern dieselbe Ressource zurück
$conn1 = oci_connect('hr', 'welcome', 'localhost/XE');
$conn2 = oci_connect('hr', 'welcome', 'localhost/XE');

// Beide Variablen zeigen auf dieselbe Verbindungsressource (Referenzzähler = 2)
var_dump($conn1 === $conn2); // true

// Erstes oci_close: Referenzzähler sinkt auf 1, Verbindung bleibt offen
oci_close($conn1);
echo 'conn1 geschlossen, conn2 noch aktiv.' . PHP_EOL;

// Zweites oci_close: Referenzzähler sinkt auf 0, Verbindung wird getrennt
oci_close($conn2);
echo 'Verbindung vollständig geschlossen.' . PHP_EOL;
bool(true) conn1 geschlossen, conn2 noch aktiv. Verbindung vollständig geschlossen.

// Wichtig · Fallstricke

Persistente Verbindungen: Bei Verbindungen, die mit oci_pconnect() erstellt wurden, schließt oci_close() die Verbindung zum Oracle-Server nicht wirklich. Die Verbindung wird stattdessen in den Verbindungspool zurückgelegt. Ausstehende Transaktionen werden in diesem Fall automatisch zurückgerollt (ROLLBACK).

Offene Transaktionen: Wird eine Verbindung geschlossen, ohne eine offene Transaktion explizit mit oci_commit() oder oci_rollback() abzuschließen, führt PHP automatisch ein Rollback durch. Stellen Sie daher sicher, dass Transaktionen vor dem Schließen abgeschlossen sind.

Ressourcen-Reihenfolge: Alle mit der Verbindung verknüpften Statement-Ressourcen sollten idealerweise vor dem Schließen der Verbindung mit oci_free_statement() freigegeben werden, um undefiniertes Verhalten zu vermeiden.