Pear MDB2 デ-タベ-ス操作
Pear MDB2 デ-タベ-ス操作ファイル挿入部作成
MDB2 を利用して各デ-タをデ-タベ-スに書込むための SQL 文を作成していきます。
ファイル内容は、
63Pear Village のトップの左サイドナビ
「Pear MDB2 デ-タベ-ス操作」 の中の
MDB2 デ-タベ-ス操作 PHP ファイル
を見てください。
Pear MDB2 デ-タベ-ス操作ファイル接続部作成
で、デ-タベ-ス接続まではファイル作成が完了しています。
続きを説明していきます。
SQL 文作成
それでは、デ-タベ-ス挿入ファイルを作成していきます。
PHP から MySQL へデータをインサートする場合なかなかうまく行きません。
それは作法がなかなかうるさいからです。
バッククォーテーション 「`」
シングルクォーテーション「'」
ダブルクォーテーション 「"」
の使い分けが難しいからです。
$sql =
"INSERT INTO `tab1` (`abc`, `def`)
VALUES ('$data1','$data2')";
のように書かないとうまく動きません。
VALUES の中で渡すデータはフィールド名ではないので、バッククォーテーションではなく
シングルクォーテーションを使用します。
$sql 変数に代入する場合のくくりは変数を参照するためダブルクォーテーションです。
しかしながら MDB2 における INSERT 文は、バッククォーテーション 「`」
を使用しないのでもっと単純です。
$sql = "INSERT tab1 info
(abc,def) VALUES
('$data1','$data2')";
これで、テ-ブル名 tab1 のカラム abc,def に
$data1',$data2 を挿入します。
脆弱性回避
SQL インジェクションと言う脆弱性を回避します。
SQL 実行の不備を意図的に利用し、デ-タベ-ス情報の読出、書換を不正に行う
アクセス攻撃を防止します。
単純に PHP 関数のみで実現する場合、MySQL へデータをインサートする時は、
PHP 関数 mysql_real_escape_string 等を使用し、挿入文字列の安全化を行うのが通常です。
PHP::mysqli 関数でも bindParam メソッドが用意されていて安全な値に変換してくれます。
Pear::MDB2 ではプリペアドステ-トメント・メソッドを使用してこれを実現化します。
プリペアドステ-トメントは SQL 文を実行する前に準備・解析します。
まず、入力値や変数などの可変する値を SQL 文中にプレ-スフォルダと呼ばれるクエスチョンマ-ク「?」
として埋込んでおき SQL 文を作成します。
その後、入力値や変数をプレ-スフォルダにあてはめ SQL 文が実行されます。
可変しない部分を先に実行し、そのあとに変数を組込むので、怪しげな式で SQL 文が実行されるのを
防止することができるようです。
プリペアドステ-トメント準備
プレ-スフォルダデ-タ配列 $data を作成します。
$data = array(
$_POST["uname"], $_POST["email"], $_POST["postnum"], $_POST["addre"], $_POST["come"]
);
プレ-スフォルダデ-タのタイプ配列 $types を設定します。
$types = array
('text', 'text', 'integer', 'text', 'text');
プレ-スフォルダデ-タのタイプにはさらには次の型が指定できます。
Boolean:1 か 0 のいずれかのみの値
decimal:十進数を正確に固定桁数で保存
float:浮動小数点数を格納
date :年月日
time :ある日の指定した時刻
Timestamp:date 型と time 型をまとめたもの
他にもあるようですが詳細は不明です。
プリペアドステ-トメント用 SQL 文を作成します。
$sql =
"INSERT INTO info
(uname,email,postnum,addre,come)
VALUES
(?, ?, ?, ?, ?)";
????? が味噌ですね。
prepare メソッド
$sth = $mdb2->prepare($sql, $types, MDB2_PREPARE_MANIP);
第一引数には SQL 文
第二引数にはプレ-スフォルダデ-タのタイプ配列
第三引数には、
デ-タベ-ステ-ブルの内容を書換える処理(INSERT、UPDATE、DELETE、等)の場合は、
MDB2_PREPARE_MANIP を設定します。
ちなみに、データを読込む際には、これを MDB2_PREPARE_RESULT にします。
2016/4/4日 以下8行追加。
XAMPP 5.6.19 版以降はドライバ PEAR::MDB2_Driver_mysql がインスト-ルできず、
PEAR::MDB2_Driver_mysqli を使用すると、MDB2_PREPARE_MANIP があるとエラ-になるようです。
MDB2_PREPARE_MANIP を削除し、
$sth = $mdb2->prepare($sql, $types);
とします。
ちなみに、MDB2_Driver_mysqli 用 PHP ファイル例は、下記から参照してください。
Pear MDB2 デ-タベ-ス操作 PHPファイル mysqli 用
次に、prepare エラ-チェックをします。
if (MDB2::isError($sth)) die("prepare エラ-: ".$sth->getMessage());
エラ-があったら getMessage メソッドでエラ-内容を取得し、処理を中断します。
SQL を実行
$result = $sth->execute($data);
execute メソッドを実施し、SQL 文を実行します。
とは言うものの SQL 文の大部分は prepare メソッドで実行されていますので、ここでは
変数値を入れ込んで、デ-タベ-スに流し込む作業をします。
あとはエラ-チェックをします。
エラ-があったらエラーメッセージ出力をします。
if (MDB2::isError($result)){
echo "データを挿入できませんでした<br>";
echo "エラー:".$result->getMessage();
}else{
echo "Info 情報簿に<br>"
.$uname." さん<br>
のデータを挿入しました";
}
最後にデータベース接続の解除をします。
$mdb2->disconnect();
MDB2 デ-タベ-ス操作ファイル完成
やっと、デ-タベ-ス挿入部分もできあがり、MDB2 デ-タベ-ス操作ファイルが完成しました。
完成ファイルは、
63Pear Village のトップの左サイドナビ「Pear MDB2 デ-タベ-ス操作」 の中の
Pear MDB2 デ-タベ-ス操作 PHP ファイル
から見てください。
Pear MDB2 デ-タベ-ス操作確認 に続く
Pear MDB2 デ-タベ-ス操作ファイル接続部作成 に戻る