PHP

【PHP】トランザクションの書き方 – 入門編

Sara

トランザクションとは?

トランザクションはMySQL データベースに複数のデータを保存するときに役立つ機能です。

例えば、30人分の試験結果をデータベースに保存するとします。

全て問題なく登録できれば良いですが、16人目で何かエラーが起きて登録に失敗するかもしれません。

このとき15人目までの登録処理をキャンセルしてくれるのがトランザクションです。

トランザクションを使うと「全て登録できる」か「全て登録できない」かのどちらかになります。

1件だけ登録できていなかったという状況を防ぐためにも、トランザクションを使えるようになっておきましょう。

準備

PHP ファイルの用意

今回はローカル環境(MAMP)を利用しているので htdocs フォルダに transaction.php というファイルを用意しています。

ファイル名などはご自身の環境に合わせて変更してください。

データベースの用意

データベース名は test として、以下のように user テーブルを用意しています。

カラム名データ型NULL
idintいいえAUTO_INCREMENT
namevarchar(10)いいえ 
ageintいいえ 

データベースに接続する

まずはデータベース接続するコードを書きます。

ユーザー名とパスワード

$user と $password は MySQL 管理画面を表示するときに使っているものです。

XAMPP を使っている方で、ログイン設定を変更していない場合は

// XAMPP
$user = 'root';
$password = '';

となります。

ブラウザで確認

ブラウザで transactions.php を開いて「データベースに接続しました。」と表示されることを確認してください。

トランザクションでデータを保存する

基本的な構造

まずはトランザクションの実行に最低限必要なコードを紹介します。

5行目
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

Exception(例外)を受け取るために必要な設定です。

これを書かないと catch で例外を受け取ることができないのでご注意ください。

7行目
$pdo->beginTransaction();

トランザクションを開始します。

11行目
$pdo->commit();

データ保存などのコードに問題がなければ実行されます。
 

14行目
$pdo->rollBack();

途中で問題が起きたら処理を取り消します。

データを保存する

次はデータを保存するコードを

  1. エラーの起きないバージョン
  2. エラーになるバージョン

の二通りで書いてトランザクションの動きを確認してみましょう。

①エラーの起きないバージョン

22行目の finally には エラーが出ても出なくても最後に実行するコードを書くことができます。

ブラウザで transaction.php を開いてみましょう。「トランザクション開始・終了」のメッセージが出ましたか?

user テーブルにも3つのデータが保存されています。

②エラーになるバージョン

次はエラーになるバージョンのコードにして、トランザクションの動きを確認してみましょう。

11行目の

$pdo->exec('INSERT INTO user(name, age) VALUES("鈴木", 25)');

$pdo->exec('INSERT INTO user(name, age) VALUES("鈴木")');

に変更して、コードを実行してみましょう。

ブラウザにエラーメッセージが表示されて、データも保存されていないと思います。

今回は「鈴木」のデータが保存できなかったので、前の「山田」が取り消されて、次の「佐藤」は実行されませんでした。

このように途中で問題が起こったときに登録処理をキャンセルしてくれるのがトランザクションです。

まとめ

今回は簡単なデータ保存でしたが、カラム数が増えても以下の構造を押さえておけば簡単にトランザクションを使うことができます。

トランザクションを使ったことがない方もぜひお試しください!

guest
0 Comments
Inline Feedbacks
View all comments
ABOUT ME
Sara
Sara
運営者
書籍やオンライン講座でプログラミングを勉強してフリーランスのプログラマーになりました。
このサイトでは「わかりやすく・シンプル」をモットーに、プログラミングの基礎からアプリ開発まで紹介します。
独学でプログラミングを勉強をしている方、基礎は勉強したけれど次に何をすれば良いか分からない...という方のお役に立てるサイトを目指しています。
0
この記事にコメントするx
記事URLをコピーしました