Start · Sprachen · PHP · Referenz · oci_error

oci_error

Funktion

Liefert detaillierte Informationen über den zuletzt aufgetretenen OCI8-Fehler als assoziatives Array oder <code>false</code>, wenn kein Fehler vorliegt.

seit PHP 5.0.0 Kategorie: db

Signatur

oci_error(resource|OCIConnection|OCIStatement|null $connection_or_statement = null): array|false

Beschreibung

oci_error() gibt den letzten Fehler zurück, der bei Oracle-Datenbankoperationen über die OCI8-Erweiterung aufgetreten ist. Die Funktion akzeptiert optional eine Verbindungs- oder Statement-Ressource, um den Fehlerkontext zu präzisieren. Wird kein Argument übergeben, liefert sie globale OCI-Fehler, die keiner bestimmten Ressource zugeordnet sind (z. B. Verbindungsfehler).

Das zurückgegebene Array enthält die Schlüssel code (ORA-Fehlernummer als Integer), message (Fehlermeldung als String), offset (Position des Fehlers im SQL-Statement) sowie sqltext (das betroffene SQL-Statement). Diese Informationen sind für gezieltes Debugging und Fehlerprotokollierung in Oracle-Anwendungen unverzichtbar.

Die Funktion sollte unmittelbar nach einem fehlgeschlagenen OCI8-Aufruf (z. B. oci_execute(), oci_connect()) aufgerufen werden, da der Fehlerzustand durch nachfolgende Operationen überschrieben werden kann. In produktiven Anwendungen empfiehlt es sich, die Fehlermeldungen zu protokollieren, ohne sie dem Endnutzer anzuzeigen.

Hinweis: Ab PHP 8 wird OCI8 über PECL bereitgestellt. Für moderne Projekte sollte mindestens OCI8 3.x mit PHP 8.x verwendet werden. Die Funktion ersetzt die ältere ocierror()-Funktion, die seit PHP 5.4 als veraltet gilt.

Parameter

Name Typ Default Beschreibung
$connection_or_statement resource|OCIConnection|OCIStatement|null null Eine OCI8-Verbindungsressource (von oci_connect()), eine Statement-Ressource (von oci_parse()) oder null. Wird null übergeben oder das Argument weggelassen, werden globale Verbindungsfehler abgerufen.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein assoziatives Array zurück, wenn ein Fehler vorliegt. Das Array enthält: code (int, ORA-Fehlernummer), message (string, Fehlerbeschreibung), offset (int, Zeichenposition des Fehlers im SQL-Text) und sqltext (string, der fehlerhafte SQL-Ausdruck). Gibt false zurück, wenn kein Fehler aufgetreten ist.

Beispiele

Fehlerbehandlung nach fehlgeschlagenem oci_execute()

<?php
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
if (!$conn) {
    $e = oci_error();
    trigger_error('Verbindungsfehler: ' . htmlspecialchars($e['message']), E_USER_ERROR);
}

// Absichtlich fehlerhaftes SQL
$stid = oci_parse($conn, 'SELECT * FROM nicht_vorhandene_tabelle');
if (!oci_execute($stid)) {
    $e = oci_error($stid);
    echo 'ORA-Fehlercode : ' . $e['code'] . PHP_EOL;
    echo 'Fehlermeldung  : ' . $e['message'] . PHP_EOL;
    echo 'SQL-Position   : ' . $e['offset'] . PHP_EOL;
    echo 'SQL-Text       : ' . $e['sqltext'] . PHP_EOL;
}

oci_free_statement($stid);
oci_close($conn);
ORA-Fehlercode : 942 Fehlermeldung : ORA-00942: table or view does not exist SQL-Position : 14 SQL-Text : SELECT * FROM nicht_vorhandene_tabelle

Fehlerprotokollierung bei Verbindungsfehlern

<?php
function oracleVerbinden(string $user, string $pass, string $dsn): mixed
{
    $conn = oci_connect($user, $pass, $dsn);
    if ($conn === false) {
        $e = oci_error(); // Kein Argument nötig bei Verbindungsfehlern
        error_log(sprintf(
            '[Oracle] Verbindung fehlgeschlagen — Code: %d, Meldung: %s',
            $e['code'],
            $e['message']
        ));
        return false;
    }
    return $conn;
}

$verbindung = oracleVerbinden('hr', 'falsches_passwort', 'localhost/XE');
if ($verbindung === false) {
    echo 'Datenbankverbindung konnte nicht hergestellt werden.';
}
Datenbankverbindung konnte nicht hergestellt werden.

// Wichtig · Fallstricke

Sicherheit: Die Fehlermeldungen von Oracle können sensible Informationen enthalten (Tabellenstrukturen, Benutzernamen, interne Pfade). Geben Sie den Inhalt von $e['message'] niemals direkt an den Browser aus, ohne ihn zuvor mit htmlspecialchars() zu escapen — und idealerweise nur in Entwicklungsumgebungen. In Produktion sollten Fehlermeldungen ausschließlich geloggt werden.

Ressourcentyp bestimmt den Kontext: Übergeben Sie bei Statement-Fehlern die Statement-Ressource, bei Verbindungsfehlern die Verbindungsressource und bei Fehlern, die noch vor einer gültigen Ressource auftreten (z. B. beim Verbindungsaufbau), null bzw. gar kein Argument.

Veraltet: Die Alias-Funktion ocierror() ist seit PHP 5.4.0 als veraltet markiert und sollte nicht mehr verwendet werden. Verwenden Sie ausschließlich oci_error().