PHP入門 | PDOを使ったデータベースアクセス | PDOでテーブルデータを追加する

ここではレコードの追加について説明する。レコードの追加も、取得と同じようにSQLクエリを実行して行う。ただし、レコードを取得する場合とは少し違いがあるため注意が必要である。

レコード取得のクエリを実行すると、データベースからレコードのデータが返される。レコードの追加は単に命令を書くだけなので、結果データを受け取る必要はない。このようなクエリの実行には、queryではなくexecというメソッドを利用する。

$変数 = $pdo->exec(クエリ);

戻り値は、更新されたレコード数を表す整数値である。execはデータの追加以外にもさまざまな処理を行えるため、「どれだけのレコードが更新されたか」がわかる。何も変わらなければ戻り値は0になる。

レコードを追加する場合、引数には次のようなクエリを設定する。

"insert into テーブル (カラム名1, カラム名2, ...) values (値1, 値2, ...) "

insert文の書き方にはほかにも方法があるが、これがもっとも理解しやすいだろう。insert into テーブルの後に、値を設定するカラム名を括弧内にカンマ区切りで書き、その後にvaluesを付け、さらに別の括弧内に値をカンマ区切りで書く。このとき、カラム名の括弧と値の括弧に書く内容は順番が対応していなければならない。

それでは、前の例を修正してレコード追加機能を実装しよう。

index.php

<?php
<?php
$result = "";
try {
    $pdo = new PDO("mysql:host=localhost:3306;dbname=mysampledata;charset=utf8", "root","1234");
    $statement = $pdo->query("select * from sampletable");
    while($record = $statement->fetch(PDO::FETCH_ASSOC)){
        $result .= "<tr>";
        foreach($record as $column){
            $result .= "<td>" . htmlspecialchars($column) . "</td>";
        }
        $result .= "</tr>";
    }
} catch(PDOException $e){
    $result = "#ERR:" . $e->getMessage();
}
$pdo = null;
?>
<!DOCTYPE html>
<html lang="ko">
    <head> 
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
        <title>sample page</title>
        <style>
        h1 { font-size:14pt;
            padding:5px;
            background-color:#AAFFFF; }
        table tr td {
            padding:5px;
            background-color:#DDFFCC; }
        </style>
    </head>
    <body>
        <h1>Hello PHP!</h1>
        <table>
        <form method="post" action="./add.php">
            <tr><td>NAME:</td><td><input type="text" name="name"></td></tr>
            <tr><td>MAIL:</td><td><input type="text" name="mail"></td></tr>
            <tr><td>TEL:</td><td><input type="text" name="tel"></td></tr>
            <tr><td>MEMO:</td><td><textarea name="memo"></textarea></td></tr>
            <tr><td></td><td><input type="submit" value="追加"></td></tr>
        </form>
        </table>
        <hr>
        <table>
        <?php echo $result; ?>
        </table>
    </body>
</html>

add.php

<?php
$name = $_POST['name'];
$mail = $_POST['mail'];
$tel = $_POST['tel'];
$memo = $_POST['memo'];
try {
    $pdo = new PDO("mysql:host=localhost:3306;dbname=mysampledata;charset=utf8", "root","1234");
    $query = "insert into sampletable (name, mail, tel, memo) values ('$name', '$mail', '$tel', '$memo')";
    $pdo->exec($query);
} catch(PDOException $e){
    echo "<html><body><h1>ERR:" . $e->getMessage() + "</h1></body></html>";
}
$pdo = null;
header('Location: index.php');

ここではindex.phpのほかに、新しくadd.phpというファイルを追加している。index.phpにアクセスし、表示されたフォームに「名前、メールアドレス、電話番号、メモ」を書いて送信すると、レコードが新しく追加される。

add.phpでは、まずフォームから送信された値をそれぞれ変数に取り出す。

$name = $_POST['name'];
$mail = $_POST['mail'];
$tel = $_POST['tel'];
$memo = $_POST['memo'];

これらの値をまとめてクエリ文を作成し、execする。クエリ文は上の値をまとめて次のように書く。

$query = "insert into sampletable (name, mail, tel, memo)  values ('$name', '$mail', '$tel', '$memo')";

idの値は必要ないため、4つのカラムの値だけを入れる。これをexecするとレコードが追加される。その後はindex.phpへリダイレクトし、一覧が表示されると追加されたレコードが現れるはずである。