From: Jeffrey dot Rodriguez at gmail dot com
Operating system: Windows XP / 2000
PHP version: 5.0.4
PHP Bug Type: MSSQL related
Bug description: When multiple result sets are not freed subsequent queries
fail
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 bug report at http://bugs.php.net/?id=33877&edit=1
--
Try a CVS snapshot (php4): http://bugs.php.net/fix.php?id=33877&r=trysnapshot4
Try a CVS snapshot (php5.0):
http://bugs.php.net/fix.php?id=33877&r=trysnapshot50
Try a CVS snapshot (php5.1):
http://bugs.php.net/fix.php?id=33877&r=trysnapshot51
Fixed in CVS: http://bugs.php.net/fix.php?id=33877&r=fixedcvs
Fixed in release: http://bugs.php.net/fix.php?id=33877&r=alreadyfixed
Need backtrace: http://bugs.php.net/fix.php?id=33877&r=needtrace
Need Reproduce Script: http://bugs.php.net/fix.php?id=33877&r=needscript
Try newer version: http://bugs.php.net/fix.php?id=33877&r=oldversion
Not developer issue: http://bugs.php.net/fix.php?id=33877&r=support
Expected behavior: http://bugs.php.net/fix.php?id=33877&r=notwrong
Not enough info:
http://bugs.php.net/fix.php?id=33877&r=notenoughinfo
Submitted twice:
http://bugs.php.net/fix.php?id=33877&r=submittedtwice
register_globals: http://bugs.php.net/fix.php?id=33877&r=globals
PHP 3 support discontinued: http://bugs.php.net/fix.php?id=33877&r=php3
Daylight Savings: http://bugs.php.net/fix.php?id=33877&r=dst
IIS Stability: http://bugs.php.net/fix.php?id=33877&r=isapi
Install GNU Sed: http://bugs.php.net/fix.php?id=33877&r=gnused
Floating point limitations: http://bugs.php.net/fix.php?id=33877&r=float
No Zend Extensions: http://bugs.php.net/fix.php?id=33877&r=nozend
MySQL Configuration Error: http://bugs.php.net/fix.php?id=33877&r=mysqlcfg