ID: 44300 Comment by: b116d at mail dot ru Reported By: alfa77 at gmail dot com Status: Open Bug Type: MSSQL related Operating System: Windows 2000 PHP Version: 5.2.5 New Comment:
Same problem here. Apache 2.2.10 Php 5.2.5 as module. OS win2003 sp1+all critical updates I even try upgrade to php 5.2.8, but it still appears. Previous Comments: ------------------------------------------------------------------------ [2008-12-09 15:25:50] frosty dot z at freesbee dot fr Hi, same problem detected here (connection "rarely" successful with mssql_connect, with a MSSQL server under quite heavy load). Happens only with PHP on Windows, not on Linux (FreeDTS). But for some reason I needed to connect from PHP/Windows, so I have used the "ADO workaround", as previously suggested by alfa77. At first, I didn't understand very well that workaround, so here are some details : Do not use the ADOdb engine 'mssql' because it will still use mssql_connect(). Instead, use 'ado_mssql' which uses COM objects ; that makes all the difference. Here is a basic database functions lib : function db_open($db_host, $db_login, $db_pass, $db_name) { $db = NewADOConnection('ado_mssql'); $dsn="PROVIDER=MSDASQL;DRIVER={SQL Server};" . "SERVER=".$db_host.";DATABASE=".$db_name.";UID=".$db_login.";PWD=".$db_pass.";"; $db->Connect($dsn); return $db; } function db_query($db, $query) { return $db->Execute($query); } function db_fetch_assoc($res) { $obj = $res->FetchNextObj(); return get_object_vars($obj); } function db_close($db) { $db->Close(); } ------------------------------------------------------------------------ [2008-09-26 11:53:35] yusefhassan at gmail dot com Have you try editing php.ini mssql.max_procs? mssql.max_procs = -1 ------------------------------------------------------------------------ [2008-03-26 08:31:18] william at nettsite dot co dot za I am running three Windows XP SP2 boxes as developer workstations, all PHP 5.2.5, installed into c:\php to avoid the space in "Program Files", and the MS Sql connection works perfectly on one of the machines, but not the other two. All three boxes are on the same LAN, can connect to the database using MS SQL Studio, and all have IIS 5.1. I have copied the PHP installation from the working PC to the others, no difference. This is whether the connection is to a remote or local SQL server. ------------------------------------------------------------------------ [2008-03-10 05:41:10] alfa77 at gmail dot com I think that this problem occurs due to usage of old DB-Lib for connecting to MSSQL. There are another bug that you cant fetch varchar more than 256-character length (you have to convert it to TEXT). Its a pity, but the best way to work with MSSQL now is using ADO (no connection/long varchar/Unicode problems). ------------------------------------------------------------------------ [2008-03-08 07:38:07] alfa77 at gmail dot com Well, I found two solutions. 1) I use ADO to connect to MSSQL. ADO is more slower (up to 2 times!), than mssql_* functions, but there are no connection problems 2) I set connection timeout in code: function getmt() { list($usec, $sec)=explode(" ",microtime()); return ((float)$usec+(float)$sec); } $time_st=getmt(); $db=new CSql; while(!$db->connect_db($Host, $Name, $Login, $Passw)) if(round(getmt()-$time_st, 0)>60) break; if(!$db->dbc) die("Connection failed!"); It is too hard to use odbc_* functions, because there are a lot of bugs with TEXT field type I must put it on the last position in query and use CONVERT(varbinary, other way I get ODBC errors. I hope that mssql_* and odbc_* problems will be solved in future PHP releases. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/44300 -- Edit this bug report at http://bugs.php.net/?id=44300&edit=1