Help us understand the problem. What is going on with this article?

超初心者が学ぶtransaction

More than 1 year has passed since last update.

学んだこと 

  • トランザクション制御を行うことでデータを守れる。(実用的な利益を感じるところまでは勉強できていない)
  • 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の中でも大丈夫。

kazuki5555
PHPとかLaravelとかDockerとかGCPとか PythonかじったりGoかじったり
https://kazuki5555.github.io/Portfolio/#/
cgate
クリーンなアドテクノロジーを目指して、安心して利用いただけるサービスを!
https://www.cgate.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした