ID: 44861 Updated by: mbecc...@php.net Reported By: php at benjaminschulz dot com -Status: Verified +Status: Closed Bug Type: PDO related -Operating System: osx +Operating System: Irrelevant PHP Version: 5.3CVS-2008-04-29 (CVS) -Assigned To: +Assigned To: mbeccati 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. Previous Comments: ------------------------------------------------------------------------ [2009-02-04 00:43:51] matteo at beccati dot com Here's the patch, including a phpt file: http://www.beccati.com/misc/pdo_pgsql_bug44861_php_5.3.patch A bit of explanations... I've changed the ordering when executing the query so that if a cursor is needed, it's created before any preparation happens. The cursor is now declared as SCROLL-able and WITH HOLD to ensure it can be used even outside transactions. I was previously trying to avoid WITH HOLD and enforce requirement for a transaction, but things were going very bad when the destructor was called after the transaction was closed, which is a common situation when calling commit() without previusly unsetting the statement variable. One thing I'm not really sure about is the behaviour of ORI_ABS and ORI_REL: ORI_ABS will work for offsets >= 1, while ORI_REL can work with negative numbers as well. I'm sorry, but it's impossible for me to guess how they should work just by reading the pdo_oci code or the Oracle documentation of OCIStmtFetch2. ------------------------------------------------------------------------ [2009-01-15 22:30:21] andrew at rook dot ca Same problem. PHP 5.2.8 on Fedora 8 (2.6.21.7-5.fc8xen) && PostgreSQL 8.2.11 ------------------------------------------------------------------------ [2008-12-12 11:36:07] denis at edistar dot com Same problem also in PHP 5.2.6. I think this is a very serious bug. ------------------------------------------------------------------------ [2008-04-29 16:13:24] php at benjaminschulz dot com Description: ------------ I don't see how to use scrollable cursors with pdo_pgsql Reproduce code: --------------- $db = new Pdo("pgsql:..."); $db->setAttribute(Pdo::ATTR_ERRMODE, Pdo::ERRMODE_EXCEPTION); $res = $db->prepare("SELECT 'row1' UNION SELECT 'row2' UNION SELECT 'row3' UNION SELECT 'row4'", array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL)); $res->execute(); var_dump($res->fetch()); // $res->fetch(Pdo::FETCH_NUM, PDO::FETCH_ORI_ABS, 2) won't throw an exception but return false Expected result: ---------------- array('row1') Actual result: -------------- Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[34000]: Invalid cursor name: 7 ERROR: cursor "pdo_pgsql_cursor_00d78a0c" does not exist' in ... ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=44861&edit=1