2

PHP での 1 つのアクションは、次の手順を実行する必要があります。

  1. いいえを実行します。多くのビジネス ロジックに基づいた、PHP PDO からの mysql ステートメント。
  2. ストアド プロシージャを実行します。
  3. PDO からさらにいくつかの MySQL ステートメントを実行します。

プロセス全体が単一のトランザクションである必要があります。MySQL ストアド プロシージャでエラーが発生した場合、トランザクション全体をロールバックする必要があります。(ストアド プロシージャには、一時テーブルを作成し、カーソル ベースのスキャンを実行し、挿入を実行するためのクエリがあります。) ストアド プロシージャの後に PDO でエラーが発生した場合でも、トランザクションで発生した変更を含め、トランザクションを完全にロールバックする必要があります。ストアド プロシージャ。

PDO ベースのクエリは、かなり前にプログラムされました。また、クライアントからの新しい要件に基づいて、ストアド プロシージャが新たに導入されています。

PHP では、ステップ 1 の開始時にトランザクションが開始されます。ステップ 3 の最後にコミットがあります。最後に catch ブロックがあり、ロールバックが発生します。

ストアド プロシージャでトランザクションを開始する必要がありますか? もしそうなら、エラーで完全にロールバックする方法は? それとも、ストアド プロシージャで auto-commit を手動で false に設定する必要がありますか? または、このストアド プロシージャが既にトランザクションの一部であることを MySQL に通知する他の方法はありますか。

そうでない場合、アクション全体で原子性が保証されていますか?

4

1 に答える 1