【 PHP学習 #30 】 データベース⑥ 「PDO トランザクション」 FIREへの旅路 ♯488
今回は、PDOのトランザクションという機能を学びます。
データベース接続編⑤の続きですので、コードなど引き継いでいます。
【 トランザクション 】
トランザクションの説明には、銀行での処理が例に出されます。
▶︎ 例:銀行での処理
Aさんの口座から、Bさんの口座へ1000円入金処理をする場合。
こういった流れになります。
もしも、処理2まで完了し、処理3へ移行する際に、通信障害が発生したとします。
そうなると、Aさんの口座から1000円減っただけで処理が終わってしまい問題になります。
このような問題が起こった場合には、処理を中断し、再度、処理1からやり直しになるように設計しておく必要があります。
つまり、処理の最初から、最後までが、ひとまとまりにしておく必要があります。
これを実現するのが、トランザクションです。
【 PDOトランザクション 】
トランザクションは、PDOクラスのメソッドです。
使うメソッドは
beginTransaction トランザクション開始
commit まとまった処理
rollBack もとに戻る
▶︎ 書き方
<?php
//データベースと接続
require 'db_connection.php';
//トランザクション まとまって処理する
$pdo->beginTransaction(); //トランザクションを開始する ・・・・ 解説①
try {
//sql処理
$stmt = $pdo->prepare($sql); //プリペアードステートメント
$stmt->bindValue('id', 2, PDO::PARAM_INT); //紐付け
$stmt->execute(); //実行
$pdo->commit(); //上記sql処理をまとめて処理する ・・・・ 解説②
} catch (PDOException $e) {
$pdo->rollBack(); //更新処理のキャンセル ・・・・ 解説③
}
try catch構文を使い、処理がまとまって完了したら実行し、
まとまって完了しない例外(Exeption)が起きた場合は、処理をキャンセルします。
<解説①>
//トランザクション まとまって処理する
$pdo->beginTransaction(); //トランザクションを開始する ・・・・ 解説①
beginTransaction()メソッドで、トランザクションを開始します。
<解説②>
try {
//sql処理
$stmt = $pdo->prepare($sql); //プリペアードステートメント
$stmt->bindValue('id', 2, PDO::PARAM_INT); //紐付け
$stmt->execute(); //実行
$pdo->commit(); //上記sql処理をまとめて処理する ・・・・ 解説②
} catch (PDOException $e) {
$pdo->rollBack(); //更新処理のキャンセル ・・・・ 解説③
}
try catch構文で、catchの( )内に、PDOExeption $e と書きます。
これは、例外があった場合の処理の書き方です。
pdo->commit(); //上記sql処理をまとめて処理する ・・・・ 解説②
ここで、commit()メソッドを使います。
try{ } の中の、一連のsqlの処理をまとめて実行します。
<解説③>
$pdo->rollBack(); //更新処理のキャンセル ・・・・ 解説③
rollBack()メソッドを使います。
処理をキャンセルするメソッドですが、その条件として、
例外(Exeption)が起きた場合という条件が、try catch構文で指定されます。
<コード全体>
//トランザクション まとまって処理する
$pdo->beginTransaction(); //トランザクションを開始する ・・・・ 解説①
try {
//sql処理
$stmt = $pdo->prepare($sql); //プリペアードステートメント
$stmt->bindValue('id', 2, PDO::PARAM_INT); //紐付け
$stmt->execute(); //実行
$pdo->commit(); //上記sql処理をまとめて処理する ・・・・ 解説②
} catch (PDOException $e) {
$pdo->rollBack(); //更新処理のキャンセル ・・・・ 解説③
}
この記事が気に入ったらサポートをしてみませんか?