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
[edit] Last updated: Fri, 11 May 2012

view this page in

oci_error

(PHP 5, PECL OCI8 >= 1.1.0)

oci_errorReturns the last error found

Description

array oci_error ([ resource $resource ] )

Returns the last error found.

The function should be called immediately after an error occurs. Errors are cleared by a successful statement.

Parameters

resource

For most errors, resource is the resource handle that was passed to the failing function call. For connection errors with oci_connect(), oci_new_connect() or oci_pconnect() do not pass resource.

Return Values

If no error is found, oci_error() returns FALSE. Otherwise, oci_error() returns the error information as an associative array.

oci_error() Array Description
Array key Type Description
code integer The Oracle error number.
message string The Oracle error text.
offset integer The byte position of an error in the SQL statement. If there was no statement, this is 0
sqltext string The SQL statement text. If there was no statement, this is an empty string.

Changelog

Version Description
4.3.0 The offset and sqltext entries were added.

Examples

Example #1 Displaying the Oracle error message after a connection error

<?php
$conn 
oci_connect("hr""welcome""localhost/XE");
if (!
$conn) {
    
$e oci_error();   // For oci_connect errors do not pass a handle
    
trigger_error(htmlentities($e['message']), E_USER_ERROR);
}
?>

Example #2 Displaying the Oracle error message after a parsing error

<?php
$stid 
oci_parse($conn"select ' from dual");  // note mismatched quote
if (!$stid) {
    
$e oci_error($conn);  // For oci_parse errors pass the connection handle
    
trigger_error(htmlentities($e['message']), E_USER_ERROR);
}
?>

Example #3 Displaying the Oracle error message, the problematic statement, and the position of the problem of an execution error

<?php
$stid 
oci_parse($conn"select does_not_exist from dual");
$r oci_execute($stid);
if (!
$r) {
    
$e oci_error($stid);  // For oci_execute errors pass the statement handle
    
print htmlentities($e['message']);
    print 
"\n<pre>\n";
    print 
htmlentities($e['sqltext']);
    
printf("\n%".($e['offset']+1)."s""^");
    print  
"\n</pre>\n";
}
?>

Notes

Note:

In PHP versions before 5.0.0 you must use ocierror() instead. The old function name can still be used in current versions, however it is deprecated and not recommended.



add a note add a note User Contributed Notes oci_error
mlong-php at mlong dot us 04-May-2004 04:15
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 05-Nov-2003 07:59
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

 
show source | credits | sitemap | contact | advertising | mirror sites