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