Developer

【PHP応用】PDO⑲ トランザクション
2021.09.30
Lv1

【PHP応用】PDO⑲ トランザクション

PDO⑲ トランザクション

今回はトランザクションについて紹介します。

■トランザクションとは

トランザクションとは簡単に言うと

関連する複数の処理を1つの処理としてまとめたものです。

よくトランザクションの例えとして紹介されるのが

銀行での口座への出金と入金です。

出金は成功したものの入金できていない、出金ができていないのに入金だけされている

このようにどちらか一方だけの処理が成功したり、失敗するようなことが

発生しないようにする仕組みがトランザクションです。

 

■トランザクションで使用する用語

まとめた処理が全て成功したときに処理の結果を反映することをコミット(commit)

まとめた処理のどれか一つが失敗し、まとめた処理を全て巻き戻すことをロールバック(rollback)といいます。

プログラムの中でも使用される用語ですのでしっかりと覚えておきましょう。

 

■トランザクションの使用方法

○セッションサンプル
SampleSession.php

<?php
  try{
    $dbh = new PDO($dsn, $user, $pass);
    $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); // プリペアードステイトメントを有効化
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 処理に失敗した場合に例外発生

    $id = 1;
    $stmt = $dbh->prepare("UPDATE members SET name = 'session' where id = ?");

    $dbh->beginTransaction(); //←トランザクション開始

    try{
      $stmt->bindParam(1, $id, PDO::PARAM_INT);
      $stmt->execute();
      $dbh->commit(); // コミット
    }catch(PDOException $e){
      $dbh->rollback(); // ロールバック
      throw $e;
    }
  }catch(PDOException $e){
    echo $e->getMessage();
  }
?>

■解説

処理をひとまとめにしたい場合はそのひとまとまりの処理が開始する際に

$dbh->beginTransaction(); //←トランザクション開始

と記述し、トランザクションを開始します。

その後は通常の処理を記述し、最後に

$dbh->commit(); //←コミット

を記述することによって処理が反映されます。

もしトランザクションを開始してcommitを忘れてしまった場合は

ロールバック処理が実行されます。

処理に失敗した場合に例外が発生し

トランザクションを開始し手から行った処理を巻き戻しています。

 

トランザクションについては以上となります。

この記事ではトランザクションの入口となる知識を紹介しました。

まずはこの基本となる仕組みをしっかりと理解しましょう。

 

■まとめ

  • 関連する複数の処理を1つの処理としてまとめたものをトランザクションと呼ぶ
  • 処理の結果を反映することをコミット(commit)と呼ぶ
  • 処理の結果を巻き戻すことをロールバック(rollback)と呼ぶ