PHP odbc连接超时报告

时间:2016-07-07 15:11:01

标签: php sql-server

我使用PHP为MS SQL Server 2012数据库创建ODBC。我的查询结果未进入,因为odbc_exec命令存在自动超时。我已将我的代码(现在正在运行)改为

$myQuery = odbc_prepare($myConnection, $mySQLQuery);
odbc_setoption($myQuery, 2, 0, 6000); // 100 minute timeout
odbc_execute($myQuery);

根据this answer的建议。我想知道如何判断这个查询是否超时,以便我可以将其报告为错误或类似的东西。

1 个答案:

答案 0 :(得分:0)

经过进一步调查,我提出了以下解决方案,如果你有更好的解决方案,请告诉我!

使用参数-d display_errors在命令提示符下运行我的程序会发出警告:

  

SQL错误:[Microsoft] [SQL Server的ODBC驱动程序13]查询超时已过期,第31行的myPHPfile.php中的SQLExecute中的SQL状态S1T00

从这里开始,我使用this answer以及this技术的基本思想来创建自己的错误处理程序,并在查询超时时执行以下操作

function myErrorHandler($errno, $errstr, $errfile, $errline)
{
    if (strpos($errstr, "Query timeout expired") !== false && $errno = E_WARNING){ 
        # If there is a warning with text containing "Query timeout expired"
        # Do your handling here
    }

    # Execute PHP internal error handler as well
    return false;
}

set_error_handler("myErrorHandler");

我搜索字符串"查询超时已过期"因为很可能还有其他$errstr消息,具体取决于ODBC;你可能不得不摆弄它以使它适合你。我在自定义错误处理程序中返回false,因此默认处理程序也会运行。