使用ADOdb访问数据库密集型PHP应用程序中的MS SQL Server。一些查询和存储过程运行时间超过30秒,并且ADODB针对查询超时抛出异常。没有ADOdb设置来调整超时。在SQL Server中设置较长的命令超时不起作用,因为它显然在ADOdb驱动程序中超时。PHP ADOdB SQL查询超时
如何扩展命令超时?
使用ADOdb访问数据库密集型PHP应用程序中的MS SQL Server。一些查询和存储过程运行时间超过30秒,并且ADODB针对查询超时抛出异常。没有ADOdb设置来调整超时。在SQL Server中设置较长的命令超时不起作用,因为它显然在ADOdb驱动程序中超时。PHP ADOdB SQL查询超时
如何扩展命令超时?
我以前遇到过这个问题。我得到的错误是:
Fatal error: ado_mssql error: [0: [Microsoft][ODBC SQL Server Driver] Query timeout expired].
如果这是你得到的错误,那么我可能会有所帮助。 第一个答案是看你的实际查询,看看你是否可以优化它。假设这是已经完成,你应该取决于你使用的是什么版本的PHP开辟ADODB/ADODB-ado5.inc.php或ADODB/ADODB-ado.inc.php。
在该文件中,查找function _connect
。你会想从这个改变:
function _connect($argHostname, $argUsername, $argPassword,$argDBorProvider, $argProvider= ''){
...
...
if ($argDatabasename) $argHostname .= ";DATABASE=$argDatabasename";
if ($argUsername) $argHostname .= ";$u=$argUsername";
if ($argPassword)$argHostname .= ";$p=$argPassword";
if ($this->debug) ADOConnection::outp("Host=".$argHostname." \n version=$dbc->version");
@$dbc->Open((string) $argHostname);
$this->_connectionID = $dbc;
$dbc->CursorLocation = $this->_cursor_location;
return $dbc->State > 0;
} catch (exception $e) {
}
return false;
}
这样:
function _connect($argHostname, $argUsername, $argPassword,$argDBorProvider, $argProvider= ''){
...
...
if ($argDatabasename) $argHostname .= ";DATABASE=$argDatabasename";
if ($argUsername) $argHostname .= ";$u=$argUsername";
if ($argPassword)$argHostname .= ";$p=$argPassword";
if ($this->debug) ADOConnection::outp("Host=".$argHostname."
\n version=$dbc->version");
@$dbc->Open((string) $argHostname);
$dbc->CommandTimeout = 120;
$this->_connectionID = $dbc;
$dbc->CursorLocation = $this->_cursor_location;
return $dbc->State > 0;
} catch (exception $e) {
}
return false;
}
的关键部分是
$ dbc->的CommandTimeout = 120;
您可以根据需要调整超时,也知道其他的php.ini设置或其他服务,可能与更长的超时影响。
希望这会有所帮助,前段时间我还写了一篇关于此的稍微更深入的文章,如果您好奇:http://pointent.com/adodb_query_timeout_expired_fix.html