ID:               42841
 Updated by:       [EMAIL PROTECTED]
 Reported By:      pr0head at gmail dot com
 Status:           Open
 Bug Type:         OCI8 related
 Operating System: Linux version 2.6.20-gentoo-r8
 PHP Version:      5.2.4
 New Comment:

This was a latent bug exposed when statement caching was fixed.
The temporary workaround is to set oci8.statement_cache_size=0

The real solution (thanks to Sree) is to add a missing case for
cursors to the out-bind callback:

diff -u oci8_statement.c.orig oci8_statement.c
--- oci8_statement.c.orig       2008-01-30 10:37:32.000000000 -0800
+++ oci8_statement.c    2008-01-30 10:21:31.000000000 -0800
@@ -1174,6 +1174,14 @@
        }
 
        if (Z_TYPE_P(val) == IS_RESOURCE) {
+               /* Processing for ref-cursor out binds */
+               if (phpbind->statement != NULL) {
+                       *bufpp = phpbind->statement;
+                       *alenpp = &phpbind->dummy_len;
+                       *piecep = OCI_ONE_PIECE;
+                       *rcodepp = &phpbind->retcode;
+                       *indpp = &phpbind->indicator;
+               }
                retval = OCI_CONTINUE;
        } else if (Z_TYPE_P(val) == IS_OBJECT) {
                if (!phpbind->descriptor) {




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

[2008-01-09 19:40:42] [EMAIL PROTECTED]

The original testcase (with the parameter only as OUT) does not crash
with OCI8 1.3.0 Beta from PECL.

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

[2007-12-14 18:53:08] michael dot virnstein at brodos dot de

This fix only works for out parameters, not for return values from
functions. I can't change thosea.
I also filed the bug (Bug #43449), haven't found the other two.

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

[2007-12-11 20:39:37] [EMAIL PROTECTED]

I reproduced the crash.  The problem appears to be the same as reported
in http://bugs.php.net/bug.php?id=43340.  If you change the PL/SQL
package definition so out_1 is an "IN OUT" parameter, there is no crash.

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

[2007-11-20 09:46:48] pr0head at gmail dot com

This script working normally if not reopen cursor.

Bad result:
$sql = "BEGIN sp_vadik_1( :cursor ); END;";
$stmt = oci_parse( $connection, $sql );
$cursor = oci_new_cursor( $connection );
oci_bind_by_name( $stmt, ":cursor", $cursor, -1, OCI_B_CURSOR );
oci_execute( $stmt, OCI_DEFAULT );
oci_execute( $cursor );
oci_free_statement( $stmt );
oci_free_statement( $cursor );

$sql = "BEGIN sp_vadik_1( :cursor ); END;";
$stmt = oci_parse( $connection, $sql );
$cursor = oci_new_cursor( $connection );
oci_bind_by_name( $stmt, ":cursor", $cursor, -1, OCI_B_CURSOR );
oci_execute( $stmt, OCI_DEFAULT );
oci_execute( $cursor );
oci_free_statement( $stmt );
oci_free_statement( $cursor );

Good result:
$sql = "BEGIN sp_vadik_1( :cursor ); END;";
$stmt = oci_parse( $connection, $sql );
$cursor = oci_new_cursor( $connection );
oci_bind_by_name( $stmt, ":cursor", $cursor, -1, OCI_B_CURSOR );
oci_execute( $stmt, OCI_DEFAULT );
oci_execute( $cursor );
oci_free_statement( $stmt );

$sql = "BEGIN sp_vadik_1( :cursor ); END;";
$stmt = oci_parse( $connection, $sql );
oci_bind_by_name( $stmt, ":cursor", $cursor, -1, OCI_B_CURSOR );
oci_execute( $stmt, OCI_DEFAULT );
oci_execute( $cursor );
oci_free_statement( $stmt );
oci_free_statement( $cursor );

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

[2007-11-20 01:00:00] php-bugs at lists dot php dot net

No feedback was provided for this bug for over a week, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".

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

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/42841

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

Reply via email to