【问题标题】:Changing QueryTimeout from sqlsrv_query从 sqlsrv_query 更改 QueryTimeout
【发布时间】:2016-07-20 09:08:54
【问题描述】:

我遇到了运行缓慢的查询问题,有时执行时间超过 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 sql-server sqlsrv query-timeout


    【解决方案1】:

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

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

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

    【讨论】:

    • 非常感谢您的全面回答! (甚至包括 sqlsrv_query 语法位)我修改了我的 php.ini,我的问题已经解决了。
    • "array("QueryTimeout" => 30)" 为我解决了类似的问题。谢谢。
    • 添加 set_time_limit(300);运行昂贵的数据库查询的 php 代码是一种解决方法,它“修复”了另一个类似的超时问题,我在一个缓慢、旧且脾气暴躁的服务器上的 php 脚本中遇到。
    猜你喜欢
    • 2012-10-20
    • 2020-01-20
    • 1970-01-01
    • 2020-03-09
    • 2020-05-12
    • 1970-01-01
    • 2011-02-06
    • 2016-12-27
    • 2015-12-29
    相关资源
    最近更新 更多