12
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

超初心者が学ぶtransaction

Last updated at Posted at 2018-05-23

学んだこと 

  • トランザクション制御を行うことでデータを守れる。(実用的な利益を感じるところまでは勉強できていない)
  • beginTransaction でトランザクションを開始
  • commit で更新を確定
  • rollBack で失敗時にデータを元の形に戻す

##使用例

個人で作成したワーク内で使ってみました。

qiita.php
<?php
if (isset($_POST['submit']) === true) {
    if ($kind !== '' && $price !== '') {
        try {
            $accessHouseholdData->pdo->beginTransaction();
            $accessHouseholdData->insertKind($kind, $price, $userId);
        } catch (Exception $e) {
            $accessHouseholdData->pdo->rollBack();
        }
        $accessHouseholdData->pdo->commit();
    }
}

試しに

qiita.php
<?php
if (isset($_POST['submit']) === true) {
    if ($kind !== '' && $price !== '') {
        try {
            $accessHouseholdData->pdo->beginTransaction();
            $accessHouseholdData->insertKind($kind, $price, $userId);
        } catch (Exception $e) {
            $accessHouseholdData->pdo->rollBack();
        }
        //$accessHouseholdData->pdo->commit();
    }
}

このように記述すると、commitできていなくDBにinsertもされていないにも関わらず、更新をかけるまでは結果が出力されてしまう結果に。
どうやらもう一度送信ボタンを押さないとトランザクションが走らないため、とりあえず保留していたところからfetch(このコードの下にインサートしたデータを取って来る処理もあります)できてしまう模様。

##難しかったこと、メモなど

  • 最初はどこにcommitとrollBackを記述すれば良いか分からなかった
  • if文の中でも使えるよ
  • とりあえず使い方はわかったものの、実際に複数のDB処理を行う場面で使ってみないと有用性は実感できないかな
  • 意外とすんなり勉強できました

参考サイト

PHP公式 http://php.net/manual/ja/pdo.transactions.php
PHP公式 http://php.net/manual/ja/pdo.begintransaction.php
PHP + PDO + MySQL のトランザクション制御方法まとめ
PDOのトランザクション

##5/24 メモ
初心者なりの疑問→もしcommittry内に記述したら、エラーが発生後の記述のコミットを読んでからロールバックできるのか?

答え→biginTransactionを行って以降エラーが発生したら、その時点でスローをしてくれて、それ以降の処理は読まないためcommittryの中でも大丈夫。

12
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?