ID:               25773
 Updated by:       [EMAIL PROTECTED]
 Reported By:      cjbj at hotmail dot com
-Status:           Open
+Status:           Assigned
 Bug Type:         Documentation problem
 Operating System: Windows 2000
 PHP Version:      Irrelevant
-Assigned To:      
+Assigned To:      tony2001
 New Comment:

Can you take a look to this, please? Thanks!


Previous Comments:
------------------------------------------------------------------------

[2004-01-23 00:15:47] cjbj at hotmail dot com

This is far from the last word on the topic, but enhances the existing
content with the basics.  The text I am suggesting follows.  I've
removed "global" from the prototype.  No other oci8 manual page
mentions what this is.

----------

(PHP 3>= 3.0.7, PHP 4)

ocierror -- Return the last Oracle error

array ocierror ([resource conn|stmt])

Description

ocierror() returns the last Oracle error.  If an error had not
occurred, ocierror() returns FALSE.

For most errors, the parameter is the most appropriate resource
handle.  For connection errors with OCILogon, OCINLogon or OCIPLogon,
do not pass a parameter.

ocierror() returns the error as an associative array.  This array
contains:

  "code"    (int)    Oracle error number
  "message" (string) Oracle error message
  "offset"  (int)    Character position of the error in the statement
(if any)
  "sqltext" (string) Statement (if any) that cause the error

The "offset" and "sqltext" entries are available from PHP 4.3 onwards.

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

$conn = @OCILogon("scott", "tiger", "mydb");
if (!$conn) {
  $e = OCIError();   // For OCILogon errors pass no handle
  echo htmlentities($e['message']);
}

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

$stmt = @OCIParse($conn, "select ' from dual");  // note mismatched
quote
if (!$stmt) {
  $e = OCIError($conn);  // For OCIParse errors pass the connection
handle
  echo htmlentities($e['message']);
}

Example 3. Displaying the Oracle error message and problematic
statement after an execution error

$r = @OCIExecute($stmt);
if (!$r) {
  $e = OCIError($stmt); // For OCIExecute errors pass the statement
handle
  echo htmlentities($e['message']);
  echo "<pre>";
  echo htmlentities($e['sqltext']);
  printf("\n%".($e['offset']+1)."s", "^");
  echo "</pre>";
}

------------------------------------------------------------------------

[2003-10-07 14:23:56] [EMAIL PROTECTED]

Yes it will definitely help if you write up something to cut and paste.
Thanks for contributing, Goba.

------------------------------------------------------------------------

[2003-10-07 05:50:42] cjbj at hotmail dot com

Description:
------------
This is similar to http://bugs.php.net/bug.php?id=9510, which was
closed two years ago saying the docs need to be updated.  However the
docs have still not been updated.  Also there are no real useful
user-supplied notes in the manual entry despite them being referred to
in http://bugs.php.net/bug.php?id=8993

How do we get the OCIError documentation updated? Will
it help if I write something to cut-and-paste?

Re-description of the problem:

The OCIError documentation
http://www.php.net/manual/en/function.ocierror.php says that if no
parameter is given, then the most recent error is displayed:

        "If the optional stmt|conn|global is not provided, the last
        error encountered is returned"

I am not seeing this with OCIParse or OCIExecute.  I am seeing
OCIError return false.  This is consistent with the comment in
http://bugs.php.net/bug.php?id=9510 :

        "the documentation needs to be updated - ocierror always
        stores the error in the most appropiate (parent-)handle. "


Reproduce code:
---------------

        <?php

        // Display OCI error
        function PrintOCIError($t, $err)
        {
          echo "<pre>$t: ".$err['message']."</pre>\n";
        }

        echo "<p>Connecting . . . </p>";
        $con = @OCILogon("scott", "tiger", "T920");
        if (!$con) {
          PrintOCIError(@OCIError());
        }

        // Deliberate syntax error: missing a single quote
        $stid = @OCIParse($con, "select 'x from dual");

        if (!$stid) {
          $e = OCIError();
          PrintOCIError("First error ", $e);

          // The correct error is displayed when $con is passed to OCIError
          $e = OCIError($con);
          PrintOCIError("Second error ", $e);
        }

        ?>

Expected result:
----------------

    According to the documentation the testcase should give:

        Connecting . . . 

        First error : ORA-01756: quoted string not properly terminated

        Second error : ORA-01756: quoted string not properly terminated


Actual result:
--------------

    The testcase gives:

        Connecting . . . 

        First error : 

        Second error : ORA-01756: quoted string not properly terminated




------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=25773&edit=1

Reply via email to