ID:               26465
 User updated by:  _nospam_svbev at umail dot ru
 Reported By:      _nospam_svbev at umail dot ru
 Status:           Bogus
 Bug Type:         MSSQL related
 Operating System: Win2k
 PHP Version:      4CVS-2003-11-28 (stable)
 New Comment:

Dear snipper,
I read the docs and know that the same link is used for the second
connection. Why is not this link closed after <open>,<open>,<close>
secquence? A query is executed successfully after this. So I suppose
that PHP counts how many times this link is opened and PHP closes this
link after this counter is zeros. (Otherwise the bug is that the
WORKING CODE below works.)

The problem is that PHP counts LINK opening differently depending on
the code structure. The same sequence of mssql_ calls, when coded
differently, gives different results. 

The code below performs all the same steps as the REPRODUCE CODE does
but WORKS SUCCESSFULLY. It outputs the rowset as expected. The WORKING
CODE does not contain step2() function. So $conn1 and $conn2 variables
which keeps connection handles are located in one variable scope.

WORKING CODE (THE ONLY VARIABLE SCOPE):
---------------

// 1.
$conn1 = mssql_connect( $servername, $user, $pswd );
mssql_select_db ( $dbname, $conn1 );

// $conn1 is a valid resource here.

// 2.
$conn2 = mssql_connect( $servername, $user, $pswd );
mssql_select_db ( $dbname, $conn2 );
mssql_close( $conn2 );

// $conn1 is still a valid resource.

// 3.
$conn2 = mssql_connect( $servername, $user, $pswd );
mssql_select_db ( $dbname, $conn2 );
mssql_close( $conn2 );


// $conn1 is not a valid resource now.

// 4.
$result = mssql_query( $strquery, $conn1 );
if( !$result )
        echo "Step 4 FAILED: $php_errormsg <br>";


Thank you.
Alla.


Previous Comments:
------------------------------------------------------------------------

[2003-11-30 04:15:19] [EMAIL PROTECTED]

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

RTFM:
"In case a second call is made to mssql_connect() with the same
arguments, no new link will be established, but instead, the link
identifier of the already opened link will be returned."

------------------------------------------------------------------------

[2003-11-29 15:06:47] _nospam_svbev at umail dot ru

where $php_errormsg is: 
'mssql_query(): <RSRC_ID> is not a valid MS SQL-Link resource'

------------------------------------------------------------------------

[2003-11-29 11:46:01] _nospam_svbev at umail dot ru

Description:
------------
mssql_close() closes more than one open connection for the same account
depending on variable scopes containing $connection_id variable.

The last STEP in the following sequence with the CONDITIONS FAILED
STEPS:
1.  establish connection #1
2.  establish connection #2 and close it
2a. repeat 2 (connect and close this connection)
3.  execute a query under connection #1      -  FAILED

CONDITIONS:
1.  all the connections use the same username and password,
2.  step #2 is performed inside a function

Step 3 failed with '<RESOURCE_ID> is not a valid MS SQL-Link resource'
message. It looks like the conn.#1 is closed.

Some modifications of this algorithm WORK without any error.
All above WORKS if do not repeat connection #2 (remove step 2a).
Also all above (1,2,2a,3) WORKS if connection #2 is established for a
different user.

The code below contains 'step2()' function which just opens and closes
the db connection. So the variables which handle resources for
connections #1 & #2 belong to separate variable scopes. 

If I remove this function and insert its code instead of its call (the
common variable scope is used) then ALL WORKS!

Reproduce code:
---------------
//
// initialize variables
//
$servername = 'servername';
$dbname     = 'dbname';
$user       = 'login';
$pswd       = 'pswd';
$strquery   = 'select * from tablename';

// 1.
$conn1 = mssql_connect( $servername, $user, $pswd );
mssql_select_db ( $dbname, $conn1 );

// 2.
step2( $servername, $dbname, $user, $pswd, $strquery );
// $conn1 is still a valid resource.

// 2a.
step2( $servername, $dbname, $user, $pswd, $strquery );

// 3.
$result = mssql_query( $strquery, $conn1 );
if( !$result )
    echo "Step 3 FAILED: $php_errormsg <br>";
else
    // print the recordset


// connect/disconnect
function step2( $servername, $dbname, $user, $pswd, $strquery )
{
    $conn2 = mssql_connect( $servername, $user, $pswd );
    mssql_select_db ( $dbname, $conn2 );
    mssql_close( $conn2 );
}

Expected result:
----------------
The query is processed successfully and the recordset is printed.

Actual result:
--------------
"Step 3 FAILED: $php_errormsg" is printed;


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=26465&edit=1

Reply via email to