PHPでDB操作(5)

ではtouroku.htmlに入力された値をデータベースに登録する処理をinput_ok.phpにコーディングしていきます。以下のようになると思います。

<?php
$dsn     ='mysql:dbname=<データベース名>;host=localhost';
$user    ='<ユーザーID>';
$pass    ='<パスワード>';

// DBへ接続
try{
    $dbh = new PDO($dsn, $user, $pass);

    $sakusya=htmlspecialchars($_POST["sakusya"],ENT_QUOTES);
    $tanka  =htmlspecialchars($_POST["tanka"],ENT_QUOTES);
    //値はプレースホルダ
    $sql = $dbh->prepare("INSERT into hyakunin_issyu (name, tanka) values (:name, :tanka)");

    // bindPramでプレースホルダを変数に設定、PARAM_でデータ型を指定
    $sql->bindParam( ':name', $sakusya, PDO::PARAM_STR);
    $sql->bindParam( ':tanka', $tanka, PDO::PARAM_STR);
    
    //SQL実行
    $res = $sql->execute();

    echo "<h3>登録完了</h3>";
    echo '<a href="touroku.html">登録画面に戻る</a>';

    }

catch(PDOException $e){
    print("データベースの接続に失敗しました".$e->getMessage());
    die();
}

// 接続を閉じる
$dbh = null;
?>

HTMLのフォームから受け取ってきた値をhtmlspecialchars関数で変換してから変数$sakusya,$tankaに入れています。この関数はHTMLのフォームにjavascriptの関数などを入れてプログラムを悪用する(SQLインジェクション)ことのできないようにするものです。

その後prepareメソッドにSQL文を書いています。SQL文は先に作成したデータベースを操作する言語です。あまり触れませんが、この例ではhyakunin_issyuというテーブルのname,tankaフィールドに値を挿入するという意味です。PHPではプレースホルダを値にとり、直接何らかの値を指定する方式はとりません(セキュリティ的に問題があるため)。

そのプレースホルダはbindparamというメソッドでプレースホルダと変数を結びつけてから実際のSQL文を実行するという方式となっています。

これでどんどん百人一首をデータベースに登録していきましょう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です