Developer

【PHP応用】 PDO⑥ プリペアードステートメントの実行 INSERT文サンプル
2021.08.31
Lv1

【PHP応用】 PDO⑥ プリペアードステートメントの実行 INSERT文サンプル

【PHP応用】 PDO⑥ プリペアードステートメントの実行 INSERT文サンプル

ユーザー名、パスワード、メールアドレスを入力する
架空の会員登録フォームを例に、
プリペアードステートメントの実行を実演します。

このサンプルコードでは、$_POST[“キー”]という形式で、
リクエストのデータを受け取っていますが、
実際には適切な入力チェックを行ってください。

サンプルウェブ画面

<form action="./prepared_statement.php" method="post">
    <div id="user_name_div">
        <label for="user_name">ユーザー名</label>
        <input type="text" name="user_name" id="user_name">
    </div>
    <div id="password_div">
        <label for="password">パスワード</label>
        <input type="password" name="password">
    </div>
    <div id="email_div">
    <label for="email">メールアドレス</label>
        <input type="email" name="email">
    </div>

    <button type="submit">提出</button>
</form>

処理コード

<?php
// フォームから送られてきたデータを抽出
$user_name = $_POST["user_name"];
$password = $_POST["password"];
$email = $_POST["email"];

// SQL文
$sql = <<<SQL
    INSERT INTO `USERS` (`user_name`, `password`, `email`) 
    VALUES (:user_name, :password, :email);
SQL;

// try-catchで囲む
try{
    // DB接続
    $db = new PDO('mysql:host=localhost;dbname=test', "root", "");
    
    // SQLにフォームから得た値を代入
    $preparedStatement = $db->prepare($sql);
    $preparedStatement->bindValue(":user_name", $user_name, PDO::PARAM_STR);
    $preparedStatement->bindValue(":password", $password, PDO::PARAM_STR);
    $preparedStatement->bindValue(":email", $email, PDO::PARAM_STR);
    
    // クエリ実行
    $result = $preparedStatement->execute();
    echo $result;
    
    // DB接続を閉じる
    $db = null;
    
}catch(Exception $e){
    // エラー表示
    echo $e;
    throw new Error("データ登録に失敗しました");
}
?>

ユーザーの操作とその結果