php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #34647 mssql.timeout has no affect
Submitted: 2005-09-26 18:51 UTC Modified: 2007-06-14 16:47 UTC
Votes:19
Avg. Score:4.8 ± 0.6
Reproduced:16 of 16 (100.0%)
Same Version:5 (31.2%)
Same OS:0 (0.0%)
From: j dot geusebroek at intellit dot nl Assigned: fmk (profile)
Status: No Feedback Package: MSSQL related
PHP Version: 5.0.5 OS: Suse 9.3
Private report: No CVE-ID: None
 [2005-09-26 18:51 UTC] j dot geusebroek at intellit dot nl
Description:
------------
mssql.timeout has no affect, a query will wait an infinite time and the scripts hangs.

I'm using the FreeTDS library, version 6.3 but i also tried
latest FreeTDS CVS.

FreeTDS debug file shows that a timeout has occured (i also set the timeout in the FreeTDS client) but PHP keeps running.

(dblib.c:4010:in dbsqlok()
net.c:327:exceeded query timeout: 10
net.c:327:exceeded query timeout: 10
net.c:327:exceeded query timeout: 10
net.c:327:exceeded query timeout: 10
net.c:327:exceeded query timeout: 10
net.c:327:exceeded query timeout: 10
)

Reproduce code:
---------------
Perform any query that outlasts your mssql.timeout setting.

Expected result:
----------------
PHP exiting with a fatal error.

Actual result:
--------------
Infinite wait.

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2007-06-13 11:30 UTC] sarstrom at gmail dot com
I can still reproduce this problem as of 2007-06-13.

I've tried with PHP 5.2.1 and 5.2.3, And FreeTDS is at 0.64
on a FreeBSD 6.1 install.

This code always waits the 20 seconds and tells me that everything went according to plan

$dbLink = mssql_connect('sqldmz','sosuser','123456');
ini_set('mssql.timeout','1');
$query = "WAITFOR DELAY '000:00:20' SELECT TOP 1 * FROM tbl_serviceorder";
$res = mssql_query($query,$dbLink);
		
if(!$res) {
   echo 'No, error, warning, timeout!!!!!!!!!';
}
else {
   $row = mssql_fetch_assoc($res);
   echo 'Everything is OK: '.$row['OrderNumber'];
}

/hps
 [2007-06-14 16:47 UTC] fmk@php.net
The two time out parameters is used during request startup and it will not have any effect to change the value at runtime.

I'll look at a way to move these to the connect/query functions, but until then you should specify these in your php.ini file.
 [2007-06-15 11:36 UTC] sarstrom at gmail dot com
I'm sorry, but setting the timeouts in php.ini doesn't help either. phpinfo() confirms that the limit is set to 1 second, but it waits an infinite amount of time for the query to finish!

Deliberatly making a self-join-query will lock up one php-thread forever, after all threads are locked up, the webserver won't answer any further requests.

/hps
 [2007-06-20 12:19 UTC] jochem dot blok at fasterforward dot nl
I also have this problem with PHP 5.2.0.

mssql.timeout is set to Local Value 60 and Master Value 60. Php doesn't time out. I have a query which run over 60 seconds.
 [2009-04-20 21:41 UTC] vinsonr at gmail dot com
This is still occurring in 5.2.6.  It sits there timing out:

write(1, "Running query...\n", 17Running query...
)      = 17
gettimeofday({1240263244, 234960}, NULL) = 0
gettimeofday({1240263244, 234963}, NULL) = 0
select(4, NULL, [3], NULL, {5, 0})      = 1 (out [3], left {5, 0})
gettimeofday({1240263244, 235613}, NULL) = 0
sendto(3, "\1\1\10@\0\0\1\0S\0E\0L\0E\0C\0T\0 \0[\0d\0a\0t\0e\0"..., 2112, MSG_NOSIGNAL, NULL, 0) = 2112
gettimeofday({1240263244, 235962}, NULL) = 0
select(4, [3], NULL, NULL, {5, 0})      = 0 (Timeout)
gettimeofday({1240263249, 235390}, NULL) = 0
gettimeofday({1240263249, 235490}, NULL) = 0
select(4, [3], NULL, NULL, {5, 0})      = 0 (Timeout)
gettimeofday({1240263254, 235491}, NULL) = 0
gettimeofday({1240263254, 235591}, NULL) = 0
select(4, [3], NULL, NULL, {5, 0})      = 0 (Timeout)
gettimeofday({1240263259, 235422}, NULL) = 0
gettimeofday({1240263259, 235523}, NULL) = 0
select(4, [3], NULL, NULL, {5, 0})      = 0 (Timeout)
gettimeofday({1240263264, 235536}, NULL) = 0
gettimeofday({1240263264, 235637}, NULL) = 0
select(4, [3], NULL, NULL, {5, 0})      = 0 (Timeout)
gettimeofday({1240263269, 235253}, NULL) = 0
gettimeofday({1240263269, 235354}, NULL) = 0
select(4, [3], NULL, NULL, {5, 0})      = 0 (Timeout)
gettimeofday({1240263274, 235997}, NULL) = 0
gettimeofday({1240263274, 236097}, NULL) = 0
select(4, [3], NULL, NULL, {5, 0})      = 0 (Timeout)
gettimeofday({1240263279, 236311}, NULL) = 0
gettimeofday({1240263279, 236413}, NULL) = 0
select(4, [3], NULL, NULL, {5, 0})      = 0 (Timeout)
gettimeofday({1240263284, 236515}, NULL) = 0
gettimeofday({1240263284, 236615}, NULL) = 0
select(4, [3], NULL, NULL, {5, 0})      = 0 (Timeout)
gettimeofday({1240263289, 236319}, NULL) = 0
gettimeofday({1240263289, 236419}, NULL) = 0
select(4, [3], NULL, NULL, {5, 0})      = 0 (Timeout)
 [2009-05-27 09:58 UTC] a dot e at inne dot pl
I think i am seeing the same issue on php 5.2.6 on Mac

Im setting timeout 60 in php.ini and 8 at runtime. Im runnig nc -l -p 4000 on localmachine and pointing mssql connection to it.

I can see its connecting and then hangs forever.

If i point mssql connect to non existing ip it fails after connection_timeout as it should.

Is there any chance for this setting to be fixed? or any way around it? 

Thanks
 [2010-01-05 16:40 UTC] beoe at komplett dot cc
We are experiencing the same behaviour.

PHP Version 5.2.11
freetds-0.64
CentOS 5.4

If our database queries get queued, the connections will never timeout and as a result all apache processes lock up. Has anyone found a workaround?
 [2010-02-26 15:46 UTC] jaysonsantos2003 at yahoo dot com dot br
The only way to it work is setting it to a huge number.
It will ignore -1 and 0.
Edit php.ini and set mssql.timeout = 854358349583 and it will work fine.
 [2010-09-30 03:32 UTC] bsdports at csnstores dot com
From what i can tell it's not a bug in php, but in the under lying freetds library. 

For those people on Freebsd or anyone else using freetds .64 and having problems with the timeout. 

Try upgrading your freetds to the latest build.

On Freebsd (until i can get the ports updated):
uninstall php5-mssql and freetds (and/or freetds-msdblib)

then install freetds-devel, and then php5-mssql.

That should get you freetds-devel which in the ports tree is version 0.82 and the mssql.timeout functionality should start working.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Oct 05 18:01:28 2024 UTC