PHP ADOdB SQL查询超时

时间:2013-04-26 16:29:30

标签: php timeout adodb

使用ADOdb访问数据库密集型PHP应用程序中的MS SQL Server。一些查询和存储过程运行时间超过30秒,ADODB会因查询超时而抛出异常。没有ADOdb设置来调整超时。在SQL Server中设置更长的命令超时不起作用,因为它显然在ADOdb驱动程序中超时。

如何延长命令超时?

1 个答案:

答案 0 :(得分:1)

我之前遇到过这个问题。我得到的错误是:

Fatal error: ado_mssql error: [0: [Microsoft][ODBC SQL Server Driver] Query timeout expired].

如果这是你得到的错误,那么我可以提供帮助。 第一个答案是查看您的实际查询,看看您是否可以优化它。假设已经完成,您应该打开 adodb / adodb-ado5.inc.php adodb / adodb-ado.inc.php < / em> 取决于您使用的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-&gt; CommandTimeout = 120;

您可以根据需要调整超时,但也要注意其他php.ini设置或可能受更长时间影响的其他服务。

希望这会有所帮助,如果你好奇的话,我前面还写了一篇关于这个问题的更深入的写作:http://pointent.com/adodb_query_timeout_expired_fix.html