#27672 [Asn->Csd]: oci_error() doesn't return a error if oci_execute() errored.

From: Date: Thu, 25 Mar 2004 08:17:33 +0000
Subject: #27672 [Asn->Csd]: oci_error() doesn't return a error if oci_execute() errored.
References: 1  Groups: php.doc 
Request: Send a blank email to phpdoc+get-969359750@lists.php.net to get a copy of this message
ID: 27672 Updated by: tony2001@php.net Reported By: powerblade at mail dot dk -Status: Assigned +Status: Closed Bug Type: Documentation problem Operating System: Windows XP PHP Version: 5CVS-2004-03-24 (dev) Assigned To: tony2001 New Comment: This bug has been fixed in the documentation's XML sources. Since the online and downloadable versions of the documentation need some time to get updated, we would like to ask you to be a bit patient. Thank you for the report, and for helping us make our documentation better. Previous Comments: ------------------------------------------------------------------------ [2004-03-25 02:02:38] tony2001@php.net You can use old names as well. They are still available as aliases of new functions. ------------------------------------------------------------------------ [2004-03-24 11:09:45] powerblade at mail dot dk Just checked it out. It seems your right. It's a documentation problem only. But still enough to confuse some people. :) You already confused me by changing all the function names a few weeks ago. ------------------------------------------------------------------------ [2004-03-24 11:01:13] tony2001@php.net you need to pass $stmt to oci_error(); in this case. so, your code will look like this: <? /* ... */ $query = 'XYZZYX'; /* Invalid SQL string */ $stmt = oci_parse($this->connection, $query); $return = @oci_execute($stmt); if($return === FALSE) { $aError = oci_error($stmt); //$stmt here throw new DatabaseException("[".$aError['code']."] Can't execute query. ".$aError['message']); } ?> Requalifying as documentation problem and assigning to myself.. ------------------------------------------------------------------------ [2004-03-24 10:48:26] powerblade at mail dot dk Not only the documentation. See my #2. ----- 2) Where is the oracle error message in the exception? I need that info for debugging. ----- If you look in the exception you get: ----------------------- Fatal error: Uncaught exception 'DatabaseException' with message '[] Can't execute query. ' in /www/index.php:31 Stack trace: #0 {main} thrown in /www/index.php on line 31 -------------------------------- The oracle error message and code is not included in the exception. Even though in the code it threw the exception with the following statement: throw new DatabaseException("[".$aError['code']."] Can't execute query. ".$aError['message']); The only way to grab the oracle error is to set up a custom error handler. You can't use oci_error() to retrieve it. ------------------------------------------------------------------------ [2004-03-24 10:40:49] tony2001@php.net Aha, now I see... It seems to me, that our manual lies about validation. That's what OCI docs say about oci_parse (OciStmtPrepare() indeed): -- An application requests a SQL or PL/SQL statement to be prepared for execution using the OCIStmtPrepare() call and passing it a previously allocated statement handle. This is a completely local call, requiring no round trip to the server. -- oci_parse will return false only if there is some problems with oracle connection. The only way to validate query is to execute it. So, I need to change the documentation. Right? ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/27672 -- Edit this bug report at http://bugs.php.net/?id=27672&edit=1

« previous php.doc (#969359750) next »