トランザクション処理
トランザクション処理を行うにはPDOクラスのメソッドを使います。トランザクション処理は次の手順で行います。
- PDOオブジェクトを生成して、データベースに接続する
- PDOオブジェクトのbeginTransactionメソッドでトランザクションを開始する
- SQLコマンドを実行する
- 確定(commit)するか、取り消し(rollBack)をする
- データベースを切断する
■ rollBackメソッドで取り消す
クラス名
|
PDO
|
メソッド名
|
rollBack
|
概要
|
トランザクションをロールバックする
|
パラメーターリスト
|
パラメター名
|
説明
|
void
|
-
|
返り値
|
bool
|
成功した場合はTRUE、失敗した場合はFALSEを返す
|
rollBackメソッドの仕様
○ ファイル
「ExecInsertTest.php」ファイルをコピーして、次のPHPファイルをプロジェクトに追加してください。
ファイルの種類 |
PHPファイル |
ファイル名 |
ExecTransactionTest.php |
サンプルダウンロード
○ プログラム
次のようにプログラムを記述してください。
ExecTransactionTest.php
- <html lang="ja">
- <meta charset="utf-8">
- <head>
- <title>INSERT文実行</title>
- </head>
- <body>
- <?php
- //検証用のフラグ
- $errorflag = true; //true:エラー発生 false:正常
- try{
- //データベースに接続する
- $pdo = new PDO('mysql:host=' . $host . ';dbname=' . $dbname .';charset=utf8;',
- $username,
- $password);
- //トランザクションを開始する
- $pdo -> beginTransaction();
- //SQL文を実行する
- $result = $pdo -> query('SELECT * FROM users;');
- //データを取得する
- print('追加前*****');
- while($row = $result -> fetchObject('User')){
- var_dump($row);
- }
- //データを追加する
- $ret = $pdo -> exec('INSERT INTO users VALUES("004", "tanaka", "tpass", "田中");');
- //検証用のフラグをもとに確定か取り消しをする
- if($errorflag){ //エラーとする場合
- $pdo -> rollBack();
- }else{ //正常とする場合
- $pdo -> commit();
- }
- //追加後のデータを取得する
- $result = $pdo -> query('SELECT * FROM users;');
- //データを取得する
- print('<hr>追加後*****');
- while($row = $result -> fetchObject('User')){
- var_dump($row);
- }
- }catch(PDOException $e){
○ 実行結果
実行結果
○ 解説
19行目の「$errorflag」変数は、今回のサンプルでデータベースを使った処理が正常に進んだ場合(false)と、処理の途中で異常が見つかった場合(true)をシミュレートするための変数です。今回のファイルでは「true」がセットされているので、エラーが起きたと仮定して処理をさせます。
43~47行目では、$errorflag変数の内容に応じて呼び出すメソッドを切り替えます。今回のファイルはエラーの状態を表しているので、44行目の「rollBack」メソッドが実行されます。そのため、55行目の追加後のデータの一覧を確認すると、データが追加されていないことを確認できます。
■ commitメソッドで確定する
クラス名
|
PDO
|
メソッド名
|
commit
|
概要
|
トランザクションをコミットする
|
パラメーターリスト
|
パラメター名
|
説明
|
void
|
-
|
返り値
|
bool
|
成功した場合はTRUE、失敗した場合はFALSEを返す
|
commitメソッドの仕様
○ ファイル
「ExecTransactionTest.php」ファイルをコピーして、次のPHPファイルをプロジェクトに追加してください。
ファイルの種類 |
PHPファイル |
ファイル名 |
ExecTransactionTest2.php |
サンプルダウンロード
○ プログラム
次のようにプログラムを記述してください。
ExecTransactionTest2.php
- <?php
- //検証用のフラグ
- $errorflag = false; //true:エラー発生 false:正常
- try{
○ 実行結果
実行結果
○ 解説
19行目の「$errorflag」変数を「false」にセットしました。今回のファイルでは正常に処理が進んだと仮定して処理をさせます。
43~47行目の処理では46行目の「commit」メソッドが実行されます。そのため、55行目の追加後のデータの一覧を確認すると、データが追加されていることを確認できます。
前へ 次へ