ID: 42841 User updated by: pr0head at gmail dot com Reported By: pr0head at gmail dot com -Status: Feedback +Status: Open Bug Type: OCI8 related Operating System: Linux version 2.6.20-gentoo-r8 PHP Version: 5.2.4 New Comment:
<?php /** * ORACLE Storage Procedure * * create or replace procedure sp_vadik_1 ( out_1 out sys_refcursor ) is begin * open out_1 for select 11 from dual union all select 12 from dual union all select 13 from dual; * end sp_vadik_1; */ $params_db = array( 'host' => "localhost", 'username' => "username", 'password' => "password", 'dbname' => "db" ); putenv( 'ORACLE_SID=' . $params_db['dbname'] ); $conn_string = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=' . $params_db['host'] . ')(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=' . $params_db['dbname'] . ')))'; $connection = @oci_connect( $params_db['username'], $params_db['password'], $conn_string ); //------------ START EXECUTE 1 ---------------// $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 ); while( $row = oci_fetch_array( $cursor, OCI_ASSOC + OCI_RETURN_LOBS ) ) { $data[] = $row; } oci_free_statement( $stmt ); oci_free_statement( $cursor ); //------------ STOP EXECUTE 1 ---------------// //------------ START EXECUTE 2 ---------------// $sql = "BEGIN sp_vadik_1( :cursor1 ); END;"; $stmt = oci_parse( $connection, $sql ); $cursor = oci_new_cursor( $connection ); oci_bind_by_name( $stmt, ":cursor1", $cursor, -1, OCI_B_CURSOR ); oci_execute( $stmt, OCI_DEFAULT ); oci_execute( $cursor ); while( $row = oci_fetch_array( $cursor, OCI_ASSOC + OCI_RETURN_LOBS ) ) { $data[] = $row; } oci_free_statement( $stmt ); oci_free_statement( $cursor ); var_dump($cur2); //------------ STOP EXECUTE 2 ---------------// oci_close( $connection ); ?> Previous Comments: ------------------------------------------------------------------------ [2007-10-04 00:27:17] [EMAIL PROTECTED] Thank you for this bug report. To properly diagnose the problem, we need a short but complete example script to be able to reproduce this bug ourselves. A proper reproducing script starts with <?php and ends with ?>, is max. 10-20 lines long and does not require any external resources such as databases, etc. If the script requires a database to demonstrate the issue, please make sure it creates all necessary tables, stored procedures etc. Please avoid embedding huge scripts into the report. +------------------------------------------------------------ | I couldn't reproduce it. | Thanks for reporting the bug, but please include a complete | testcase so I don't have to guess what the code might be. | Also, what does "stop work" mean? +------------------------------------------------------------ ------------------------------------------------------------------------ [2007-10-03 15:39:01] pr0head at gmail dot com Description: ------------ If you have two or more times the same stored procedure where the cursor name the same ( :cursor ), PHP stop work. Reproduce code: --------------- $connection = oci_connect( .... ); // First execute SP $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 ); while( $row = oci_fetch_array( $cursor ) ) { .... } oci_free_statement( $stmt ); oci_free_statement( $cursor ); Expected result: ---------------- If the cursor names are not different ( first - :cursor1, second - :cursor2), the challenges are successful. If not cleaned cursor to the first call, and declare it in the second, the queries are also successful. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=42841&edit=1