ID: 33877 Updated by: [EMAIL PROTECTED] Reported By: Jeffrey dot Rodriguez at gmail dot com -Status: Open +Status: Bogus Bug Type: MSSQL related Operating System: Windows XP / 2000 PHP Version: 5.0.4 Assigned To: fmk New Comment:
SQL Server does not allow new queries when results are pending. The client must fetch all results or free unwanted results before new queries can be executed. Previous Comments: ------------------------------------------------------------------------ [2005-07-27 17:46:57] Jeffrey dot Rodriguez at gmail dot com Issue still occurs with the latest CVS snapshot. ------------------------------------------------------------------------ [2005-07-27 13:52:45] [EMAIL PROTECTED] Please try using this CVS snapshot: http://snaps.php.net/php5-latest.tar.gz For Windows: http://snaps.php.net/win32/php5-win32-latest.zip ------------------------------------------------------------------------ [2005-07-27 01:16:38] Jeffrey dot Rodriguez at gmail dot com Typo: Failure to do so will cause subsequent mssql_next_query() or mssql_select_db() calls to fail. Should read: Failure to do so will cause subsequent mssql_query() or mssql_select_db() calls to fail. ------------------------------------------------------------------------ [2005-07-27 00:53:09] Jeffrey dot Rodriguez at gmail dot com Description: ------------ NOTE: This issue seems to occur in versions (atleast) 4.3.4 - 5.0.4 WORKAROUND: Be sure to call mssql_free_result() on every result that has the potential to return multiple result sets. PROBLEM: When a query (stored procedure for example) returns multiple result sets, you have to call mssql_next_result() OR mssql_free_result() on the result of an mssql_query(). Failure to do so will cause subsequent mssql_next_query() or mssql_select_db() calls to fail. ADDITIONAL NOTES: The docs should be updated if this functionality is intended. Sorry about the 'excessive' length of code, I figure you can handle 8 extra lines. Reproduce code: --------------- <?php /* -- Stored procedure CREATE PROCEDURE bug_proofOfConcept_sp AS SELECT 'Result set one' AS 'Result Set'; SELECT 'Result set two' AS 'Result Set'; GO */ $link = mssql_connect("server", "user", "pass"); mssql_select_db("database", $link); $rs = mssql_query("EXECUTE bug_proofOfConcept_sp"); /* Note, it doesn't matter if you fetch from $rs */ /* This is where things bomb out */ if (!mssql_select_db("database", $link)) { echo "Broken, as expected.\n"; } /* If we free the result things work fine again. Alternatively, you could call mssql_next_result($rs) */ mssql_free_result($rs); // Select the database (3rd, and last time) if (!mssql_select_db("database", $link)) { echo "Everything should be working here; wtf?\n"; } ?> Expected result: ---------------- No output Actual result: -------------- Warning: mssql_select_db(): Unable to select database: database in H:\proofOfConcept.php on line 16 Broken, as expected. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=33877&edit=1