使用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