#26465 [Opn->Bgs]: mssql_close() closes more than one connection.
| From: | sniper@php.net | Date: | Sun, 30 Nov 2003 09:15:19 +0000 |
| Subject: | #26465 [Opn->Bgs]: mssql_close() closes more than one connection. | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-51366@lists.php.net to get a copy of this message | ||
ID: 26465
Updated by: sniper@php.net
Reported By: _nospam_svbev at umail dot ru
-Status: Open
+Status: Bogus
Bug Type: MSSQL related
Operating System: Win2k
PHP Version: 4CVS-2003-11-28 (stable)
New Comment:
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."
Previous Comments:
------------------------------------------------------------------------
[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