PHP での 1 つのアクションは、次の手順を実行する必要があります。
- いいえを実行します。多くのビジネス ロジックに基づいた、PHP PDO からの mysql ステートメント。
- ストアド プロシージャを実行します。
- PDO からさらにいくつかの MySQL ステートメントを実行します。
プロセス全体が単一のトランザクションである必要があります。MySQL ストアド プロシージャでエラーが発生した場合、トランザクション全体をロールバックする必要があります。(ストアド プロシージャには、一時テーブルを作成し、カーソル ベースのスキャンを実行し、挿入を実行するためのクエリがあります。) ストアド プロシージャの後に PDO でエラーが発生した場合でも、トランザクションで発生した変更を含め、トランザクションを完全にロールバックする必要があります。ストアド プロシージャ。
PDO ベースのクエリは、かなり前にプログラムされました。また、クライアントからの新しい要件に基づいて、ストアド プロシージャが新たに導入されています。
PHP では、ステップ 1 の開始時にトランザクションが開始されます。ステップ 3 の最後にコミットがあります。最後に catch ブロックがあり、ロールバックが発生します。
ストアド プロシージャでトランザクションを開始する必要がありますか? もしそうなら、エラーで完全にロールバックする方法は? それとも、ストアド プロシージャで auto-commit を手動で false に設定する必要がありますか? または、このストアド プロシージャが既にトランザクションの一部であることを MySQL に通知する他の方法はありますか。
そうでない場合、アクション全体で原子性が保証されていますか?