0

実行に数分かかるスクリプトがあります。最初に mysql 接続が確立され (mysql_connect)、いくつかのクエリを含むループが続きます (mysql_query)。このループは非常に長く続き、数分後、スクリプトは mysql サーバーがなくなったという警告をスローします (指定された引数は有効な MySQL 結果リソースではありません)。

クエリが実行され、結果が取得された場合でも、一定の実行時間後に接続が自動的に閉じられますか?

4

2 に答える 2

2

「指定された引数は有効な MySQL 結果リソースではありません」とは、mysql_...() 関数が結果リソースを渡すことを期待しているが、他の何かを渡したなどのことを意味します。

$result = false;
$row = mysql_fetch_array($result, MYSQL_ASSOC);
// => Supplied argument is not a valid MySQL result resource

では、なぜ $result は になるのfalseでしょうか? ほとんどの場合、前のクエリが失敗し、スクリプトにエラー処理がないためです。すべてのクエリは失敗する可能性があり、それを防ぐためにできることは何もありません。したがって、何らかのエラー処理が常に必要であり、スクリプトが結果がない場合 (ただしエラー状態) に結果を処理しようとしないようにします。最も単純なエラー処理は、エラーが発生するたびにスクリプトを停止させることです。

$sql = 'SELECT x,y,z FROM ...';
$result = mysql_query($sql, $mysql) or die(mysql_error());

mysql_query()falseは、エラーがあった場合に返します。その場合、ステートメント afterorが実行されます。つまり、クエリが失敗した場合、php は MySQL の最後のエラー メッセージを出力してから終了します。
ただし、もう少し高度なエラー処理ルーチンを実装したい場合があります...
たとえば、PDOオブジェクトが PDO::ERRMODE_EXCEPTION に設定されている場合、エラーが発生するたびに例外がスローされます。(単純な)戻り値と比較して、それを見逃すのは少し難しいです。

編集:これは元の回答を完全に書き直したものです。最初の提案は、wait_timeoutの値を調べることでした。

于 2009-10-20T16:47:56.203 に答える
-1

おそらくphp
Max Execution Time
Set Time Limitによって設定されたタイムアウトに達しています

于 2009-10-20T16:50:43.117 に答える