PDOによるデータベースアクセス (5/7)
作成:2012-07-29 16:57
更新:2012-07-29 16:57
更新:2012-07-29 16:57
■レコードを追加する
続いて、レコードの追加についてです。レコードの追加も、やはりSQLのクエリーを実行することで行います。が、レコード取得の場合とはちょっと違いがあるので注意が必要です。
レコードの取得は、クエリーを実行すると、データベースからレコードのデータが送り返されてきます。が、レコードの追加は、単に命令を送るだけで、結果のデータ等を受け取る必要はありません。こうしたクエリーの実行は、queryではなく「exec」というメソッドを利用します。
レコードの追加を行う場合、引数には以下のようなクエリーが設定されます。
では、先ほどのサンプルを修正し、レコードの追加を実装してみましょう。ここでは、index.php(前回作成したファイル)の他、新たに「add.php」というファイルを用意しています。index.phpにアクセスし、表示されたフォームに、名前・メールアドレス・電話番号・メモ書きを書いて送信すると、それらがレコードとして追加されます。
add.phpでは、まずフォームから送信された値をそれぞれ変数に取り出しておきます。
レコードの取得は、クエリーを実行すると、データベースからレコードのデータが送り返されてきます。が、レコードの追加は、単に命令を送るだけで、結果のデータ等を受け取る必要はありません。こうしたクエリーの実行は、queryではなく「exec」というメソッドを利用します。
$変数 = $pdo->exec( クエリー );返り値は、更新されたレコード数を示すint値になります。execは、データの追加以外にもいろいろと莉桜しますので、「どれだけのレコードが更新されたか」がわかるようになっているのですね。何も変わらなければ返り値はゼロになります。
レコードの追加を行う場合、引数には以下のようなクエリーが設定されます。
"insert into テーブル (カラム名1, カラム名2, ……)insert文の書き方は他にもありますが、これが一番わかり易いでしょう。「insert into テーブル」の後に、()で値を設定するコラム名をカンマで続けて記述し、その後に「values」をつけて、また()内に値をカンマで続けて記述します。このとき、コラム名の()と値の()に記述する内容は、並び順が揃うようにします。
values ( 値1, 値2, ……)"
では、先ほどのサンプルを修正し、レコードの追加を実装してみましょう。ここでは、index.php(前回作成したファイル)の他、新たに「add.php」というファイルを用意しています。index.phpにアクセスし、表示されたフォームに、名前・メールアドレス・電話番号・メモ書きを書いて送信すると、それらがレコードとして追加されます。
add.phpでは、まずフォームから送信された値をそれぞれ変数に取り出しておきます。
$name = htmlspecialchars($_POST['name']);これらの値をまとめてクエリー文を作成し、execします。クエリー文は、上の値をまとめて以下のように作成しています。
$mail = htmlspecialchars($_POST['mail']);
$tel = htmlspecialchars($_POST['tel']);
$memo = htmlspecialchars($_POST['memo']);
$query = "insert into sampletable (name,mail,tel,memo)idの値は不要なので、4つのカラムの値をまとめておきます。これをexecすれば、レコードが追加されます。後は、index.phpにリダイレクトして一覧表示すれば、追加されたレコードが表示されるはずです。
values ('$name','$mail','$tel','$memo')";
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※index.phpのソースコード <?php $result = ""; try { $pdo = new PDO("mysql:host=localhost;dbname=mysampledata;charset=utf8", "root",""); $statement = $pdo->query("select * from sampletable"); while($record = $statement->fetch(PDO::FETCH_ASSOC)){ $result .= "<tr>"; foreach($record as $column){ $result .= "<td>" . $column . "</td>"; } $result .= "</tr>"; } } catch(PDOException $e){ $result = "#ERR:" . $e->getMessage(); } $pdo = null; ?> <!doctype html> <html lang="ja"> <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 = htmlspecialchars($_POST['name']); $mail = htmlspecialchars($_POST['mail']); $tel = htmlspecialchars($_POST['tel']); $memo = htmlspecialchars($_POST['memo']); try { $pdo = new PDO("mysql:host=localhost;dbname=mysampledata;charset=utf8", "root",""); $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');
※関連コンテンツ