#39759 [Opn->Fbk]: Can't use stored procedures from PDO on Windows

From: Date: Wed, 06 Dec 2006 18:10:22 +0000
Subject: #39759 [Opn->Fbk]: Can't use stored procedures from PDO on Windows
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-106024@lists.php.net to get a copy of this message
ID: 39759 Updated by: iliaa@php.net Reported By: mike at we11er dot co dot uk -Status: Open +Status: Feedback Bug Type: PDO related Operating System: Windows XP PHP Version: 5.2.0 New Comment: Latest version enabled buffered queries by default so your code will work. Previous Comments: ------------------------------------------------------------------------ [2006-12-06 18:03:45] mike at we11er dot co dot uk I'm sorry to reopen again, but I think the "optional feature not implemented" is just wrong. That would imply that stored procedures are an optional feature. If so, then that is unnacceptable. I have some code to reproduce the error: <?php /* CREATE PROCEDURE Test() BEGIN SELECT 0; SELECT 1; END */ class DBWriter extends PDO { public function __construct() { try { parent::__construct("mysql:host=localhost;dbname=test","user", "password"); $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { throw new Exception("Failed to connect: " . $e->getMessage()); } } } $db = new DBWriter(); $stmt = $db->prepare("CALL Test()"); $stmt->execute(); $stmt->fetchAll(); // run the query again and we get an error "Cannot execute queries while other unbuffered queries are active." // but we can't fetch all results from the previous query because nextRowset isn't defined $stmt->execute(); ?> I just want the status of this to be elevated - I think "feature request" is just plain wrong. I want to hear an official opinion on this... ------------------------------------------------------------------------ [2006-12-06 17:55:17] tony2001@php.net The error message "Optional feature not implemented" means that the feature is optional and it's not implemented yet. We already have a request for this feature, no need for another one, thank you. ------------------------------------------------------------------------ [2006-12-06 17:46:42] mike at we11er dot co dot uk I'm reopening this because it isn't a feature request, it's a /bug/. You cannot use stored procedures. That is a bug! And the bug report/feature request you mention has been idling for months. This is an important issue and I have yet to hear any acknowledgement that this is an issue worth fixing. It's getting rather annoying now. ------------------------------------------------------------------------ [2006-12-06 17:14:35] tony2001@php.net Duplicate of feature request #38842. ------------------------------------------------------------------------ [2006-12-06 17:09:57] mike at we11er dot co dot uk Description: ------------ On the windows version of pdo_mysql, the nextRowset() method isn't implemented for PDOStatement. This means that when executing a stored procedure, it is impossible to fetch all result sets, because all stored procedures return multiple result sets (one contains a return value of some sort). Because you can't fetch all result sets, all subsequent queries are broken, with the following error/exception: SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). nextRowset() is /required/ to properly use stored procedures. Reproduce code: --------------- It should be possible to fetch all results from a stored procedure with code like this: $stmt = $db->prepare("CALL SomeProcedure()"); $stmt->execute(); do { $stmt->fetchAll(); } while ($stmt->nextRowset()); Intead the error message: SQLSTATE[HYC00]: Optional feature not implemented Is displayed. But I don't see how this can be optional in this case, it is required. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=39759&edit=1

« previous php.bugs (#106024) next »