機能概要

14-ユーザー管理①(サインアップ)で実装したプログラムをベースに、トランザクション処理を学びます。

データベース準備

下記のSQL文を実行し、ユーザーマスタ(user_mst)を構築します。詳細は、14-ユーザー管理①(サインアップ)にて確認してください。

プログラミングコード

「user_signup_tran.php」ユーザー登録ページファイル

元となるプログラムは、14-ユーザー管理①(サインアップ)「user_signup.php」となります。

  • 4行目:「config.php」を読み込み、その中の変数情報を使用することができるようになります。
  • 48行目~66行目:トランザクション処理の範囲となります。
  • 50行目:beginTransaction()を利用して、トランザクション処理を開始します。
  • 56行目:execute()でSQL文を実行します。
  • 58行目:エラーが無い場合は、commit()で処理を確定します。
  • 63行目:エラーが有る場合は、rollback()でSQL処理をすべてもとに戻します。
<?php

//データベース接続情報を格納
include("config.php");

$txt_user = "";
$txt_email = "";
$txt_pass = "";

if($_SERVER['REQUEST_METHOD'] === 'POST'){

    //POSTデータの取得
    $txt_user = $_POST['txt_user'];
    $txt_email = $_POST['txt_email'];
    $txt_pass = $_POST['txt_pass'];

    $err = "";

    if($txt_user == ""){
        $err .= "【ユーザー名】";
    }
    if($txt_email == ""){
        $err .= "【メールアドレス】";
    }
    if($txt_pass == ""){
        $err .= "【パスワード】";
    }

    if($err == ""){
        $sql = "insert into user_mst("
                ."user_kj"
                .",email"
                .",password"
                .",delete_ku"
                .",insert_at"
                .",update_at"
                .") values ("
                .":user_kj"
                .",:email"
                .",:password"
                .",'0'"
                .",now()"
                .",now()"
                .");";
        $dbh = new PDO($dsn, $user, $password);
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        //トランザクション処理
        try{
            $dbh->beginTransaction();

            $stmt = $dbh->prepare($sql);
            $stmt->bindValue(':user_kj', $txt_user, PDO::PARAM_STR);
            $stmt->bindValue(':email', $txt_email, PDO::PARAM_STR);
            $stmt->bindValue(':password', password_hash($txt_pass, PASSWORD_DEFAULT), PDO::PARAM_STR);
            $stmt->execute();

            $dbh->commit();
            echo "登録完了しました";

        } catch(Exception $e){

            echo "データの書き込みに失敗しました。". $e->getMessage();
            $dbh->rollBack();

        }
    }else{
        echo $err."を修正してください。";
    }
}
?>

<html>
<head>
    <title>会員登録</title>
</head>
<body>
    <h1>会員登録</h1>
    <form action="" method="POST">
        <p>
            <label>ユーザー名:</label>
            <input type="text" name="txt_user">
        </p>
        <p>
            <label>メールアドレス:</label>
            <input type="text" name="txt_email">
        </p>
        <p>
            <label>パスワード:</label>
            <input type="password" name="txt_pass">
        </p>
        <input type="submit" name="submit" value="会員登録する">
    </form>
</body>
</html>

演習問題

  1. 上記のコードを使用して、ファイル作成し、動作するようにしてみよう。
  2. 他のプログラムでSQL文を実行する際に、トランザクション処理を取り入れてみよう。