PHP

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

 

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

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

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

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

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

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


 

準備

PHP ファイルの用意

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

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


 
 

データベースの用意

データベース名は test としています。

以下のような user テーブルを使います。

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

 


 
 
 

データベースに接続する

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

 

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

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();

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

データを保存してみる

実際にデータを保存してみましょう。

まずはエラーの起きないバージョンです。

 

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


 

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


 

finally には エラーが出ても出なくても最後に実行したいコードを書くことができます。
 
 

次はエラーになるバージョンです。

11行目の

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

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

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

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


 

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


 

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

まとめ

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

 

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


 
 

ABOUT ME
Sara
「わかりやすく・シンプル」をモットーに、スマホアプリ・ウェブアプリの作り方を紹介します。 独学でプログラミングを勉強をしている方、基礎は勉強したけれど次に何をすれば良いか分からない...という方のお役に立てるサイトを目指しています🙂
guest

CAPTCHA


0 Comments
Inline Feedbacks
View all comments
0
この記事にコメントするx