Start · Sprachen · PHP · Referenz · ocierror

ocierror

Funktion

Veralteter Alias für <code>oci_error()</code> — gibt Fehlerinformationen der letzten OCI8-Operation zurück.

seit PHP 4.0.0 Kategorie: db

Signatur

ocierror(resource|null $connection_or_statement = null): array|false

Beschreibung

ocierror() ist ein veralteter Alias der Funktion oci_error() und liefert Informationen über den zuletzt aufgetretenen Fehler bei einer Oracle-Datenbankoperation über die OCI8-Erweiterung.

Als optionalen Parameter akzeptiert die Funktion eine Verbindungs-Ressource, eine Statement-Ressource oder null. Anhand des übergebenen Parameters wird der Fehler im passenden Kontext (Verbindungsebene, Statement-Ebene oder global) abgefragt. Das Rückgabe-Array enthält unter anderem den Oracle-Fehlercode (code), die Fehlermeldung (message), den SQL-Offset (offset) sowie das betroffene SQL-Statement (sqltext).

Achtung: Diese Funktion ist seit PHP 8.0.0 als veraltet markiert (deprecated) und sollte nicht mehr in neuem Code verwendet werden. Stattdessen sollte ausschließlich oci_error() eingesetzt werden, um Kompatibilität mit zukünftigen PHP-Versionen sicherzustellen.

Parameter

Name Typ Default Beschreibung
$connection_or_statement resource|null null Eine OCI8-Verbindungs-Ressource (von oci_connect()), eine Statement-Ressource (von oci_parse()) oder null für globale Fehler, die keiner spezifischen Ressource zuzuordnen sind.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein assoziatives Array mit den Schlüsseln code (Oracle-Fehlercode), message (Fehlermeldung), offset (Byte-Position im SQL-String) und sqltext (das betroffene SQL-Statement) zurück. Falls kein Fehler aufgetreten ist, wird false zurückgegeben.

Beispiele

Fehlerbehandlung bei einer fehlgeschlagenen Oracle-Abfrage

<?php
// Verbindung herstellen
$conn = oci_connect('benutzername', 'passwort', 'localhost/XE');

if (!$conn) {
    // ocierror() ohne Parameter für Verbindungsfehler
    $e = ocierror();
    echo 'Verbindungsfehler: ' . $e['message'];
    exit;
}

// Absichtlich fehlerhaftes SQL
$stmt = oci_parse($conn, 'SELECT * FROM nicht_vorhandene_tabelle');

if (!oci_execute($stmt)) {
    // ocierror() mit Statement-Ressource für Statement-Fehler
    $e = ocierror($stmt);
    echo 'Fehlercode: ' . $e['code'] . PHP_EOL;
    echo 'Fehlermeldung: ' . $e['message'] . PHP_EOL;
    echo 'SQL: ' . $e['sqltext'] . PHP_EOL;
}

oci_free_statement($stmt);
oci_close($conn);
?>
Fehlercode: 942 Fehlermeldung: ORA-00942: table or view does not exist SQL: SELECT * FROM nicht_vorhandene_tabelle

Empfohlene Alternative mit oci_error()

<?php
// Moderne, empfohlene Variante – kein veralteter Alias
$conn = oci_connect('benutzername', 'passwort', 'localhost/XE');

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

$stmt = oci_parse($conn, 'SELECT sysdate FROM dual');

if (!oci_execute($stmt)) {
    $e = oci_error($stmt); // statt ocierror($stmt)
    trigger_error(htmlspecialchars($e['message']), E_USER_ERROR);
}

oci_free_statement($stmt);
oci_close($conn);
?>

// Wichtig · Fallstricke

Deprecation: ocierror() ist ein veralteter Alias und wurde in PHP 8.0.0 als deprecated markiert. In zukünftigen PHP-Versionen könnte die Funktion entfernt werden. Verwende stattdessen immer oci_error().

Sicherheitshinweis: Die Fehlermeldungen von Oracle können sensible Informationen über Datenbankstruktur und SQL-Abfragen enthalten. Gib den Inhalt von $e['message'] und $e['sqltext'] niemals ungefiltert an den Endanwender aus — nutze htmlspecialchars() und logge detaillierte Fehler nur serverseitig.