3

我遇到了运行缓慢的查询的问题,有时执行时间超过 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 秒的时间内始终如一地返回。)

4

1 回答 1

7

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

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

来源:选项参数 - sqlsrv_query (php.net)


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

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

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您希望查询运行的最长时间(以秒为单位)。

于 2016-07-20T09:36:56.077 回答