ID:               33681
 Updated by:       [EMAIL PROTECTED]
 Reported By:      fjortiz at comunet dot es
-Status:           Open
+Status:           Assigned
 Bug Type:         COM related
 Operating System: Win2K Server
-PHP Version:      5.0.4
+PHP Version:      5CVS-2005-07-13
-Assigned To:      
+Assigned To:      wez
 New Comment:

Assigned to the maintainer.



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

[2005-07-13 18:23:02] fjortiz at comunet dot es

tried with latest version (5.1.0-dev) on Win32 but still the same.
Sorry.

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

[2005-07-13 17:54:23] [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-13 17:06:44] fjortiz at comunet dot es

Description:
------------
Ok, this seems a tricky one, so sorry for the long post. It's related
to the way Apache2 and IIS work with COM objects. So maybe some
combined Apache2/IIS/Database/COM skills are needed.

I want to connect to a DB (MSSQL in this case), but I need some
features unavailable under php_mssql (asked to F. Kromman, thanks). So
I'm forced to use COM/OLEDB via ADODB.Connection. COM works great now
under PHP5 but...

I have this problem: 

If I use this combination:
PHP5+OLEDB(COM)+IIS: IIS keeps a pool of persistent connections so the
next PHP scripts re-use this open connection and doesn't have to open a
new one.

PHP5+OLEDB(COM)+Apache2: Apache2 works fine with the queries but at the
end of my PHP script, the connection is closed, and every subsecuent PHP
script has to open a new connection.

It's not a critical issue as long as your DB server is on the same
machine as the Web Server:

Open new connection on Apache2: 0.02 secs.
Re-use existing connection on IIS: 0.002 secs.

But it does matter if both are on different machines and/or while on
very heavy traffic web-sites.

My theory: not a COM guru, but maybe Apache2 lacks being compiled with
some COM Apartment threading model which IIS already has. I'm really
sad about being impelled to work with this COM/OLEDB shit but I'd
really like to get this working on PHP5+Apache2 (will have to swap to
PHP5+IIS if there is no way to solve this).

Thanks in advance


Reproduce code:
---------------
<?
// Win32, need MDAC and a SQL Server
$HOST = "your-sql-server";
$USER = "user";
$PASS = "pwd";
$DB = "database";

$dsn = "Provider=SQLOLEDB;Data Source=$HOST;User
Id=$USER;Password=$PASS;Initial Catalog=$DB";
$charPage = CP_UTF8;

$db = new COM("ADODB.Connection", NULL, $charPage);
$db->Open($dsn);

// sample query to get all the SQL Server processes for your Database,
along with the App that created them
// (Apache, IIS, others...)
$query="select distinct sd.name, sp.program_name from
master..sysprocesses sp
        inner join master..sysdatabases sd on sd.dbid=sp.dbid 
        where sd.name='$DB'
        order by 1,2";

$rs = $db->Execute($query);

// some output
print "<table border=1>";
while (!$rs->EOF)       {
        print
"<tr><td>".$rs->Fields["program_name"]->Value."</td><td>".$rs->Fields["name"]->Value."</td></tr>\n";
        $rs->MoveNext();
}
print "</table>";
$db->Close();  // doesn't really matter, IIS keeps connection open,
Apache2 closes it even if this line is commented

?>

Expected result:
----------------
We list all the SQL Server open processes, during and after PHP script
execution:

select distinct sd.name, sp.program_name from master..sysprocesses sp
        inner join master..sysdatabases sd on sd.dbid=sp.dbid 
        where sd.name='nc208'
        order by 1,2

While executing PHP5+Apache2:
database        Apache HTTP Server
database        SQL Query Analyzer                                            
                                                                 
database        SQL Query Analyzer - Object Browser                           
                                                                 

When PHP script ends:
database        SQL Query Analyzer                                            
                                                                 
database        SQL Query Analyzer - Object Browser                           
                                                                 

PHP5+Apache2 CLOSES CONNECTION --> not there when script finishes.

While executing the same on PHP5+IIS:
database        Internet Information Services
database        SQL Query Analyzer                                            
                                                                 
database        SQL Query Analyzer - Object Browser                           
                                                                 

When PHP script ends:
database        Internet Information Services
database        SQL Query Analyzer                                            
                                                                 
database        SQL Query Analyzer - Object Browser                           
                                                                 

PHP5+IIS KEEPS CONNECTION OPEN for re-use --> at least for 60 seconds,
which is a default OLEDB driver setting I think.





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


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

Reply via email to