10-4. PHPからデータベースを操作する④データ挿入
今日は登録画面(送信フォーム)からデータを入力してテーブルにそのデータを挿入する方法をやります。
1-1. 送信フォームの作成
送信フォームの作成には、対象になるテーブル構造に合わせる必要があるため、作成前にて^ブル構造の確認を行う必要があいます。
「show fiels from member;」を実行すると、テーブルの構造を表示します。
テーブルの構造が表示されたら、フォームを作成します。 <FORM name ="form1" method="post" action="view.php">
<html>
<head>
<title>PHPのテスト</title>
<META http-equiv="Content-Type" content="text/htm;
charset=utf-8"
</head>
<BODY bgcolor="#FFFFFF" text="#000000">
<font size="4">PHPのテスト</font>
氏:<br>
<INPUT type = "text" name="last_name"><br>
名:<br>
<INPUT type ="text" name="first_name"><br>
年齢:<br>
<INPUT type="text" name="age"><br>
<INPUT type="submit" valur="送信">
</FORM>
</body>
</html>
1-2. データベースに接続する
接続は前回やったPDOを使用します。
form.htmlのコードに、<FORM name ="form1" method="post" action="view.php">というものがありましたが、view.phpをPODクラスを使って作成します。
$dsn = "$db_type:host=$db_host; try{
<html>
<head>
<title>PHPのテスト</title>
</head>
<body>
<?php
$db_user = "ユーザー名";
$db_pass = "パスワード";
$db_host = "localhost"
$db_name = "sampledb";
$db_type = "mysql";
dbname=$db_name;charset=utr8";
$pdo = new PDO ($dsn, $db_user, $sb_pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
print "接続しました
";
} catch(PDOException $Exception){
die('エラー:'. $Exception->getMessage());
}
DSN(データソースネーム)を変数にして組み立てて、tryブロック内で、データベースに接続しています。PDOの時にやったエラーモードを設定し、プリペアドステートメントを利用できるようにエミュレート機能をfalseにしています。
1-3. トランザクション処理
「1-2.データベースに接続する」のコードにつ付けて、トランザクション処理を設定します。
try{
$PDO->beginTransaction();
$sql = "INSERT INTO member (last_name,first_name,age)
VALUES(:last_name,:first_name,:age)";
$stmh = $pdo ->prepare($sql);
$stmh ->bindValue(':last_name',
$_POST['last_name'], PDO::PARAM_STR);
$stmh ->bindValue(':first_name',
$_POST['first_name'], PDO::PARAM_STR);
$stmh ->bindValue(':age',
$_POST['age'], PDO::PARAM_INT);
$stmh->execute();
$pdo->commit();
print "データを". $stmh->rowCount()."件、挿入しました。
";
}
catch(PDOException $Exception){
$pdo->rollBack();
print "エラー:". $Exception->getMessage();
}
?>
</body>
</html>
そして結果は、、、
あれ、、、、、エラーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
うーん。。。