#33877 [NEW]: When multiple result sets are not freed subsequent queries fail
| From: | Jeffrey dot Rodriguez at gmail dot com | Date: | Tue, 26 Jul 2005 22:53:10 +0000 |
| Subject: | #33877 [NEW]: When multiple result sets are not freed subsequent queries fail | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-82499@lists.php.net to get a copy of this message | ||
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