1

コードがループするループがあり、すべてのループで別のサーバーに接続して、MySQLクエリを作成します。ただし、ループ/クエリの1つが最後まで到達できず、すべてのコードが中断する場合があります。ループでエラーが発生した場合、プロセスをスキップして次のループに移動する方法はありますか?

4

4 に答える 4

2

上記のコメントで述べたように、これを行う正しい方法はtry...catchブロック内です。

これらの詳細については、こちらをご覧ください。

@Paulに感謝します。

于 2011-08-18T06:24:50.353 に答える
1

そのループ内で、接続を確認し、接続が確立されている場合は、ロジックを実行します。そのため、接続が確立されていない場合、ロジック部分はスキップされます。

于 2011-08-18T06:11:21.607 に答える
1

「続行」を使用して、ループ内の次の項目にスキップします。

継続する

于 2011-08-18T06:12:26.023 に答える
1

これはすべて、phpの組み込みのmysqlmysqli、またはサードパーティのライブラリを使用しているかどうかによって異なります。ただし、原則として、次のロジックをお勧めします。

  1. ループスタート
  2. 接続
  3. 接続を確認してください
  4. SHOW TABLESクエリを使用して欠落している可能性のあるテーブルを確認するか、スキーマ情報を保持しているmysqlデータベースに対して権限を確認してください。また、dbスキーマを選択する前にこれを実行して、 SHOWDATABASESを使用してスキーマが存在するかどうかを確認することもできます。
  5. テーブルが存在する場合は、それに対してロジックを実行して切断します。それ以外の場合は、ループの次の反復に移動し続けます
  6. ループ終了

問題のテーブルで行う作業によっては、 @ mysql_queryなどの@プレフィックスを使用してクエリからのエラーを抑制し、影響を受ける行の数を確認することもできます。選択を行う場合は、結果セットをチェックして、何かが戻ったかどうかを確認できます。@の使用は好きではありませんが、空の既存のテーブルからの選択や同様の状況が発生する可能性があることに注意してください。コードによっては奇妙な動作をします。試して/キャッチエラー制御フローを処理するためのより良いアプローチです。しかし、実際に例外をスローすることは、比較すると非常に遅いプロセスであり、すべての作業はあらゆる場所のデータベースへの接続を中心に行われるため、このループによって多くの例外がスローされる可能性がある場合は、さらに遅くすることはお勧めできません。 。また、ループ内のステップをスキップするためにそれを使用する場合、一部の人々がロジックに従うのは非常に難しい場合があります。したがって、@のようなものはここで受け入れられる可能性があります;)

于 2011-08-18T06:41:21.120 に答える