ID: 33877
User updated by: Jeffrey dot Rodriguez at gmail dot com
Reported By: Jeffrey dot Rodriguez at gmail dot com
Status: Open
Bug Type: MSSQL related
Operating System: Windows XP / 2000
PHP Version: 5.0.4
New Comment:
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.
Previous Comments:
------------------------------------------------------------------------
[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