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

Reply via email to