質問: move_uploaded_file($tmp_file, $dir . $picture_id . "." . $ext); }else{ throw new Exception(); } } } } catch (Exception $e) { $pdo->rollBack(); } ?> ``` ### 試したこと 課題に対してアプローチしたことを記載してください ### 補足情報(言語/FW/ツール等のバージョンなど) PHPバージョン 7.1 CentOS 7.2
回答: > > // 1.画像の基本情報(ユーザーIDとタイトル)をpicurresに登録し、そのIDを取得する > > > のブロックの中で`$pdo->commit();`の行がありますね。ここでトランザクションをコミットしているので、この時点でトランザクションは終了し、ロールバックもなにもなくなります。 DBのロールバックは「トランザクション内で起きたことを巻き戻す」ので、コミットでトランザクションが終わってしまっていた場合、`rollBack`を呼んでもなにも起きません。`commit`後のPDOはオートコミット状態(INSERT等の処理が走り次第すぐコミットされる)に戻るので、foreach内の処理も全てすかさずコミットされ、ロールバック対象になりません。 コミットは「**全ての**更新処理が正常に終わったら」するものであり、ロールバックは「なにかが失敗したときに、コミットの代わりに行うもの」です。