????JFIF??x?x????'
Server IP : 79.136.114.73 / Your IP : 3.15.189.231 Web Server : Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.29 OpenSSL/1.0.1f System : Linux b8009 3.13.0-170-generic #220-Ubuntu SMP Thu May 9 12:40:49 UTC 2019 x86_64 User : www-data ( 33) PHP Version : 5.5.9-1ubuntu4.29 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /proc/self/root/home/b8009/php-5.6.22/ext/oci8/tests/ |
Upload File : |
--TEST-- Bug #42841 (REF CURSOR and oci_new_cursor PHP crash) --SKIPIF-- <?php $target_dbs = array('oracledb' => true, 'timesten' => false); // test runs on these DBs require(dirname(__FILE__).'/skipif.inc'); ?> --INI-- oci8.statement_cache_size=20 --FILE-- <?php require dirname(__FILE__).'/details.inc'; // note a oci_new_connect() occurs lower in the script $c = oci_connect($user, $password, $dbase); // Initialization $stmtarray = array( "create or replace procedure bug42841_proc(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 bug42841_proc;", "create or replace package bug43449_pkg is type cursortype is ref Cursor; function testcursor return cursortype; end bug43449_pkg;", "create or replace package body bug43449_pkg is function testcursor return cursortype is retCursor cursorType; begin Open retCursor For 'select * from dual'; return retCursor; end; end bug43449_pkg;" ); oci8_test_sql_execute($c, $stmtarray); // Main code function do_bug42841($c) { echo "First attempt\n"; $sql = "BEGIN bug42841_proc(:cursor); END;"; $stmt = oci_parse($c, $sql); $cursor = oci_new_cursor($c); 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)) { $data1[] = $row; } oci_free_statement($stmt); oci_free_statement($cursor); var_dump($data1); echo "Second attempt\n"; $sql = "BEGIN bug42841_proc(:cursor); END;"; $stmt = oci_parse($c, $sql); $cursor = oci_new_cursor($c); 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)) { $data2[] = $row; } oci_free_statement($stmt); oci_free_statement($cursor); var_dump($data2); } function do_bug43449($c) { for ($i = 0; $i < 2; $i++) { var_dump(bug43449_getCur($c)); } } function bug43449_getCur($c) { $cur = oci_new_cursor($c); $stmt = oci_parse($c, 'begin :cur := bug43449_pkg.testcursor; end;'); oci_bind_by_name($stmt, ':cur', $cur, -1, OCI_B_CURSOR); oci_execute($stmt, OCI_DEFAULT); oci_execute($cur, OCI_DEFAULT); $ret = array(); while (ocifetchinto($cur, $row, OCI_ASSOC)) { $ret[] = $row; } oci_free_statement($cur); oci_free_statement($stmt); return $ret; } echo "Test bug 42841: Procedure with OUT cursor parameter\n"; do_bug42841($c); $c = oci_new_connect($user, $password, $dbase); echo "Test bug 43449: Cursor as function result\n"; do_bug43449($c); // Cleanup $stmtarray = array( "drop procedure bug42841_proc", "drop package bug43449_pkg" ); oci8_test_sql_execute($c, $stmtarray); echo "Done\n"; ?> --EXPECT-- Test bug 42841: Procedure with OUT cursor parameter First attempt array(3) { [0]=> array(1) { [11]=> string(2) "11" } [1]=> array(1) { [11]=> string(2) "12" } [2]=> array(1) { [11]=> string(2) "13" } } Second attempt array(3) { [0]=> array(1) { [11]=> string(2) "11" } [1]=> array(1) { [11]=> string(2) "12" } [2]=> array(1) { [11]=> string(2) "13" } } Test bug 43449: Cursor as function result array(1) { [0]=> array(1) { ["DUMMY"]=> string(1) "X" } } array(1) { [0]=> array(1) { ["DUMMY"]=> string(1) "X" } } Done