downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

oci_execute> <oci_define_by_name
Last updated: Fri, 30 Oct 2009

view this page in

oci_error

(PHP 5, PECL oci8 >= 1.1.0)

oci_errorLiefert den letzten Fehler

Beschreibung

array oci_error ([ resource $source ] )

Liefert den zuletzt gefundenen Fehler.

Parameter-Liste

source

Der Parameter ist, bei den meisten Fehlern, der am besten geeignete Ressourcen-Handler. Bei Verbindungsfehlern mit oci_connect(), oci_new_connect() oder oci_pconnect() keinen Parameter mitgeben.

Rückgabewerte

Wenn kein Fehler gefunden wurde, liefert oci_error() FALSE zurück. Ein Fehler wird von oci_error() als assoziatives Array zurückgegeben. In diesem Array enthält code den Oracle-Errorcode und message den Oracle-Fehlertext.

Changelog

Version Beschreibung
4.3 Im Rückgabe-Array sind nun offset und sqltext enthalten, die die Fehlerstelle anzeigen und den ursprünglichen SQL-Text, der den Fehler verusacht hat, beinhalten.

Beispiele

Beispiel #1 Zeigt die Oracle-Fehlermeldung nach einem Verbindungsfehler an

$conn = @oci_connect("scott", "tiger", "mydb");
if (!$conn) {
  $e = oci_error();   // Bei oci_connect-Fehler ohne Handler
  echo htmlentities($e['message']);
}

Beispiel #2 Zeigt die Oracle-Fehlermeldung nach einem Parse-Error an

$stmt = @oci_parse($conn, "select ' from dual");  // Fehlerhafte Quottierung
if (!$stmt) {
  $e = oci_error($conn);  // Bei oci_parse-Fehler mit Verbindungs-Handler
  echo htmlentities($e['message']);
}

Beispiel #3 Zeigt die Oracle-Fehlermeldung und das problematische Statement nach einem Ausführungsfehler

$r = oci_execute($stmt);
if (!$r) {
  $e = oci_error($stmt); // Bei oci_execute-Fehler mit Statement-Handle
  echo htmlentities($e['message']);
  echo "<pre>";
  echo htmlentities($e['sqltext']);
  printf("\n%".($e['offset']+1)."s", "^");
  echo "</pre>";
}

Anmerkungen

Hinweis: In der PHP-Versionen vor 5.0.0 muss man ocierror() benutzen. Den Namen kann man immer noch nutzen. Er wurde als Alias für oci_error() für die Abwärtskompatibilität erhalten. Dieses ist allerdings veraltet und wird nicht empfohlen.



add a note add a note User Contributed Notes
oci_error
mlong-php at mlong dot us
03-May-2004 06:45
It seems in 4.3 (and probably other versions), if you call OCIError twice it will fail on the second time (with an empty array). This used to work on previous versions but no longer.

So my prior example of doing if (OCIError won't work and you have to do it like the other contributed example:

$r = @OCIExecute($selectw,OCI_DEFAULT);
if (!$r)
{
 $erra=OCIError($selectw);
 print "Error: ${erra['code']} ${erra['message']}";
}
vi at sh dot nu
04-Nov-2003 09:29
Here's an example of how to get the offset from an Oracle statement that errored:

<?

$conn
= OCILogon ("user", "password", "database");

$statement = OCIParse ($conn, "select foo, bar from t1 where id = 1");

OCIExecute ($statement, OCI_DEFAULT);

$error = OCIError ($statement);

if (
$error["offset"]) {

       
$sqltext = substr ($error["sqltext"], 0, $error["offset"]) .
               
'*' .
               
substr ($error["sqltext"], $error["offset"]);
        echo
$sqltext;
}

?>

Presuming the column "foo" doesn't exist in the table "t1", the above code will produce the following:

PHP Warning:  OCIStmtExecute: ORA-00904: "FOO": invalid identifier
 in test.php on line 7
select *foo, bar from table where id = 1

Note the asterisk next to the word "foo".

This example may seem overly simple, and the error location obvious, but when you have an enormous query, you'll quickly find this functionality very useful.

Daniel Ceregatti

oci_execute> <oci_define_by_name
Last updated: Fri, 30 Oct 2009
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites