2016-07-07 68 views
1

我正在使用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建議。我想知道如何判斷此查詢是否超時,以便我可以將其報告爲錯誤或類似的內容。

回答

0

經過進一步調查,我提出了以下解決方案,請讓我知道如果你有一個更好的!

與參數-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,所以默認處理程序也會運行。