ID: 42496 Updated by: [EMAIL PROTECTED] Reported By: iddekingej at lycos dot com -Status: Open +Status: Closed Bug Type: OCI8 related Operating System: win 2000 PHP Version: 5.2.4 New Comment:
This bug has been fixed in CVS. Snapshots of the sources are packaged every three hours; this change will be in the next snapshot. You can grab the snapshot at http://snaps.php.net/. Thank you for the report, and for helping us make PHP better. Fix has been merged to CVS. Thanks to Haneef for the investigation & patch. Previous Comments: ------------------------------------------------------------------------ [2007-12-05 10:11:02] tim at digicol dot de Had the same problem (maximum number of open cursors reached when selecting CLOBs) with PHP 5.2.4 and 5.2.5 on several boxes. Example: PHP 5.2.4 (phpinfo says OCI8 version 1.2.3, Revision: 1.269.2.16.2.37) on Linux (Debian 4.0), compiled against Oracle Instant Client 10.2.0, connected to Oracle 10.1.0.4.0. The patch (commenting out zend_list_addref() in oci8_statement.c) seems to work; at least I cannot reproduce the error any longer. We did not test the patch in production yet, so I cannot say whether there are any side effects. ------------------------------------------------------------------------ [2007-12-04 10:44:12] michael dot virnstein at brodos dot de Ok, see Bug #43492 for the result set issue ------------------------------------------------------------------------ [2007-12-04 02:13:07] [EMAIL PROTECTED] Thanks for the information. Can you please open a new bug for the result set issue. Let's use this (#42496) bug only for any issues with the LOB fix. ------------------------------------------------------------------------ [2007-11-30 16:36:04] michael dot virnstein at brodos dot de I tried to remove "zend_list_addref(outcol->statement->id);" from SQLT_RSET in php_oci_define_callback function() as well, but that doesn't work really well. It seemed to work at first, but it creates problems when returning the cursor from a function, because it leads to "ORA-01001: invalid cursor" when i try to fetch from the returned cursor. Testcase: <?php $conn = ocilogon('user', 'pass', 'db'); function fetch($conn, $id) { $result = null; $stmt = ociparse($conn, 'select cursor(select * from dual) c from dual'); ociexecute($stmt, OCI_DEFAULT); ocifetchinto($stmt, $result, OCI_ASSOC); ociexecute($result['C'], OCI_DEFAULT); return $result['C']; } for ($id = 1; $id <= 300; $id++) { $cur = fetch($conn, $id); ocifetchinto($cur, $row, OCI_ASSOC); ocifreestatement($cur); } ?> When i run the code above without removing "zend_list_addref(outcol->statement->id);" from SQLT_RSET i have the problem, that i get an "ORA-01000: maximum open cursors exceeded", because the statement within the function doesn't get closed. I don't know if that can be implemented easily, but the best thing would be, that a cursor gets closed if it is already out of scope and therefore not accessible from the php-code anymore and all nested cursors got closed already. ------------------------------------------------------------------------ [2007-11-30 16:30:55] michael at six dot de Same problem here: php 5.2.5 with oracle 11g client (linux 64bit) against oracle 10.2.0.3 server (solaris 10 sparc 64bit). Patch works ok, no ORA-01000 errors anymore. ------------------------------------------------------------------------ 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/42496 -- Edit this bug report at http://bugs.php.net/?id=42496&edit=1