PHP odbc连接超时报告
问题描述:
我正在使用PHP将ODBC创建为MS SQL Server 2012数据库。我的查询结果未进入,因为odbc_exec
命令有自动超时。我已经改变了我的代码(现在运转),以PHP odbc连接超时报告
$myQuery = odbc_prepare($myConnection, $mySQLQuery);
odbc_setoption($myQuery, 2, 0, 6000); // 100 minute timeout
odbc_execute($myQuery);
为每this answer建议。我想知道如何判断此查询是否超时,以便我可以将其报告为错误或类似的内容。
答
经过进一步调查,我提出了以下解决方案,请让我知道如果你有一个更好的!
与参数-d display_errors
命令提示符下运行我的程序给了警告:
SQL error: [Microsoft][ODBC Driver 13 for SQL Server]Query timeout expired, SQL state S1T00 in SQLExecute in myPHPfile.php on line 31
从这里,我使用的基本想法来自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
消息,这取决于O分类如下在ODBC中;你可能不得不摆弄这个让它为你工作。我在我的自定义错误处理程序中返回了false
,所以默认处理程序也会运行。