ID: 26465
User updated by: _nospam_svbev at umail dot ru
Reported By: _nospam_svbev at umail dot ru
Status: Open
Bug Type: MSSQL related
Operating System: Win2k
PHP Version: 4CVS-2003-11-28 (stable)
New Comment:
where $php_errormsg is:
'mssql_query(): <RSRC_ID> is not a valid MS SQL-Link resource'
Previous Comments:
------------------------------------------------------------------------
[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