3

クエリの実行が遅く、実行に 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);

私の理解では、タイムアウトの詳細をパラメーターとして渡す必要がありますsqlsrv_connectが、構文が正しくありません。

(私はできる限りクエリを最適化しましたが、残念ながら db テーブルの設計を考えると、30 秒以内に一貫して返すことができません。)

4

1 に答える 1

7

このエラーは実際には PHP エラーであり、sqlsrv ドライバーとは関係ありません。デフォルトでは、sqlsrv ドライバーは結果を受け取るまでクエリを実行します。

キー: QueryTimeout
値: 正の整数値
説明: クエリのタイムアウトを秒単位で設定します。デフォルトでは、ドライバーは無期限に結果を待ちます。
(私のものを強調)

ソース: Options パラメーター - 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はクエリを実行する最大時間 (秒単位) です。

于 2016-07-20T09:36:56.077 に答える