From: christopher dot jones at oracle dot com Operating system: n/a PHP version: 5.2.1RC4 PHP Bug Type: OCI8 related Bug description: oci_close() has no effect when in a transaction
Description: ------------ The session management differs in some cases when there is an uncommited transaction. Run the test case with and without the parse/execute lines commented. When the lines are commented out an explicit oci_close() or the end of f1() causes the connection to be closed. With the lines active the sessions remain open and the transactions are not rolled back. A third error case is if the sample script is changed to use oci_new_connect(). Confusingly the explict close has no effect but the end-of-scope will rollback and close the connection. This may be a in implementation quirk of reference counting but it is a user level bug. Oci_close() should always close when oci8.oci_old_close_semantics has its default value. The cleanup at end-of-scope should be consistent regardless of the user transaction state. Reproduce code: --------------- <?php // Create this table first: create table cj1 (a number); $v = ini_get('oci8.old_oci_close_semantics'); echo "oci8.old_oci_close_semantics is $v\n"; ociinternaldebug(1); echo "Test 1\n"; $c1 = oci_new_connect("hr", "hr", "localhost/XE"); echo "Do statement\n"; $s1 = oci_parse($c1, "insert into cj1 values(1)"); var_dump(oci_execute($s1, OCI_DEFAULT)); echo "Before close: transaction should rollback and connection should be closed\n"; ocilogoff($c1); echo "After close\n"; echo "Test 2\n"; function f1() { echo "In f1()\n"; $c2 = oci_new_connect("hr", "hr", "localhost/XE"); if (!$c2) { $m = ocierror(); echo $m['message']; exit; } else { echo "Connection succeeded\n"; } echo "Do statement\n"; $s2 = oci_parse($c2, "insert into cj1 values(1)"); var_dump(oci_execute($s2, OCI_DEFAULT)); echo "Before end of scope\n"; } f1(); echo "after f1() call - end of scope\n"; echo "End of script\n"; ?> -- Edit bug report at http://bugs.php.net/?id=40313&edit=1 -- Try a CVS snapshot (PHP 4.4): http://bugs.php.net/fix.php?id=40313&r=trysnapshot44 Try a CVS snapshot (PHP 5.2): http://bugs.php.net/fix.php?id=40313&r=trysnapshot52 Try a CVS snapshot (PHP 6.0): http://bugs.php.net/fix.php?id=40313&r=trysnapshot60 Fixed in CVS: http://bugs.php.net/fix.php?id=40313&r=fixedcvs Fixed in release: http://bugs.php.net/fix.php?id=40313&r=alreadyfixed Need backtrace: http://bugs.php.net/fix.php?id=40313&r=needtrace Need Reproduce Script: http://bugs.php.net/fix.php?id=40313&r=needscript Try newer version: http://bugs.php.net/fix.php?id=40313&r=oldversion Not developer issue: http://bugs.php.net/fix.php?id=40313&r=support Expected behavior: http://bugs.php.net/fix.php?id=40313&r=notwrong Not enough info: http://bugs.php.net/fix.php?id=40313&r=notenoughinfo Submitted twice: http://bugs.php.net/fix.php?id=40313&r=submittedtwice register_globals: http://bugs.php.net/fix.php?id=40313&r=globals PHP 3 support discontinued: http://bugs.php.net/fix.php?id=40313&r=php3 Daylight Savings: http://bugs.php.net/fix.php?id=40313&r=dst IIS Stability: http://bugs.php.net/fix.php?id=40313&r=isapi Install GNU Sed: http://bugs.php.net/fix.php?id=40313&r=gnused Floating point limitations: http://bugs.php.net/fix.php?id=40313&r=float No Zend Extensions: http://bugs.php.net/fix.php?id=40313&r=nozend MySQL Configuration Error: http://bugs.php.net/fix.php?id=40313&r=mysqlcfg