我遇到运行缓慢的查询问题,有时执行时间超过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);
我的理解是我需要通过作为参数传递timout细节,sqlsrv_connect
但我没有得到正确的语法.
(我已经尽可能地优化了查询,不幸的是,考虑到db表的设计,我无法在不到30秒的时间内始终如一地返回.)
此错误实际上是PHP错误,与sqlsrv驱动程序无关; 默认情况下,sqlsrv驱动程序将运行查询,直到收到结果.
键:QueryTimeout
值:正整数值
描述:以秒为单位设置查询超时.默认情况下,驱动程序将无限期地等待结果.
(强调我的)
来源:选项参数 - sqlsrv_query(php.net)
错误是php.ini文件中定义的max_execution_time - 默认为30秒.当脚本运行超过30秒时,解析器终止脚本,抛出致命错误.
要解决此错误,您可以更改max_execution_time
php.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
是您希望查询运行的最长时间(以秒为单位).