10

PHPのmysqliライブラリを使用しています。データベースの挿入と更新は、常にtry-catchブロックにあります。各クエリの成功はすぐにチェックされ(if $result === false)、失敗すると例外がスローされます。catchはmysqli_rollback()、ユーザーへのメッセージを呼び出して終了します。

私の質問は、の戻り値をわざわざチェックする必要があるmysqli_rollback()かどうかです。その場合、ロールバックが失敗した場合、コードはどのようなアクションを実行する必要がありますか?

ロールバックがどのように失敗するかを理解するのに苦労しています(MySQLのいくつかのひどいバグを除いて)。そして、PHPはとにかく終了するので、ロールバックを呼び出すことはほとんど不要に思えます。わかりやすくするためにコードに含める必要があると思いますが、PHPが終了すると、MySQLへの接続が閉じられ、コミットされていないトランザクションが自動的にロールバックされます。

4

2 に答える 2

5

ロールバックが失敗した場合 (接続障害など)、接続が閉じられた後に変更がロールバックされるため、エラーを処理する必要はありません。トランザクション中は、明示的なコミットがない限り (または、各ステートメントの後にコミットすることを意味する自動コミット モードで実行していない限り)、トランザクションはロールバックされます。

自動コミットが無効になっているセッションが最終トランザクションを明示的にコミットせずに終了した場合、MySQL はそのトランザクションをロールバックします。

ロールバック エラーを処理したい唯一のケースは、スクリプトを終了するのではなく、後で新しいトランザクションを開始する場合です。トランザクションを開始すると、現在のトランザクションが暗黙的にコミットされるためです。暗黙的なコミットを引き起こすステートメントを確認してください

于 2012-08-24T11:48:02.197 に答える
0

mysqli_rollbackデータベースに接続していない (接続したことがない) 場合、失敗する可能性があります。事前のエラー処理に依存します。

于 2012-08-23T22:03:21.117 に答える