从sqlsrv_query更改QueryTimeout

时间:2016-07-20 09:08:55

标签: php sql-server sqlsrv query-timeout

我遇到运行缓慢的查询问题,有时执行时间超过30秒,因此我希望增加sqlsrv_query超时。

Fatal error: Maximum execution time of 30 seconds exceeded

我的PHP语法有问题,因为http://php.net/manual/en/function.sqlsrv-query.php中的示例对我来说没有意义。

目前我的连接/设置如下:

$testServer = 'IP\servername,PORT';
$testDetails = array('Database' => 'DBNAME', 'UID' => 'USERNAME', 'PWD' => 'Password');
$testConnect = sqlsrv_connect($testServer, $testDetails);

我的理解是,我需要通过sqlsrv_connect中的参数传递详细信息,但我的语法不正确。

(我已经尽可能地优化了查询,不幸的是,考虑到db表的设计,我无法在不到30秒的时间内始终如一地返回。)

1 个答案:

答案 0 :(得分:5)

此错误实际上是PHP错误,与sqlsrv驱动程序无关;默认情况下,sqlsrv驱动程序将运行查询,直到收到结果。

  

键:QueryTimeout
  值:正整数值
  描述:以秒为单位设置查询超时。 默认情况下,驱动程序会无限期地等待结果。
  (强调我的)

来源:Options parameter - sqlsrv_query (php.net)

错误是php.ini文件中定义的max_execution_time - 默认为30秒。当脚本运行超过30秒时,解析器终止脚本,抛出致命错误。

要解决此错误,您可以更改php.ini文件中的max_execution_time设置,或者在脚本顶部添加:

ini_set("max_execution_time", value); //The value will only be changed for this script!

value是您希望脚本运行的最长时间(以秒为单位)

正如您的问题是询问为查询设置超时,其语法为:

$result = sqlsrv_query($conn, $query, $params, array("QueryTimeout" => 30));

同样,30是您希望查询运行的最长时间(以秒为单位)。