PHP MYSQL INSERT編 2  データ登録SQLについて

 



//3.データ登録SQL作成
//prepare("")の中にはmysqlSQLで入力したINSERT文を入れて修正すれば良いイメージ
$stmt = $pdo->prepare("INSERT INTO gs_bm_table2(name,author,kan,kansou,indate)VALUES(:name,:author,:kan,:kansou,sysdate());
");
$stmt->bindValue(':name', h($name), PDO::PARAM_STR); //Integer(数値の場合 PDO::PARAM_INT) 第3引数は省略出来るが、セキュリティの観点から記述している。文字列か数値はmysqlのデータベースに登録したものがvarcharaかintかというところで判断する
$stmt->bindValue(':author', h($author), PDO::PARAM_STR); //Integer(数値の場合 PDO::PARAM_INT)
$stmt->bindValue(':kan', h($kan), PDO::PARAM_INT); //Integer(数値の場合 PDO::PARAM_INT)
$stmt->bindValue(':kansou', h($kansou), PDO::PARAM_STR); //Integer(数値の場合 PDO::PARAM_INT)
$status = $stmt->execute();

 

prepare()は

PDO->prepare() — 文を実行する準備を行い、文オブジェクトを返す

INSERT文のVALUESの中にはINSERT編0にて変数に入れたpostされた値を入れたい。

そのためのセキュリティ考慮の記述がbindValueの部分である。

h()を括っているのはxss対策の関数を指定している為。これはmustではない。

なので基本は

'(:name, $name, PDO::PARAM_STR);と書いてOKです

さらに:nameの部分はVALUESの中の記載が例えば:a1であればbindValueの中の:nameも:a1とすれば変更して良い。

ここは自由記述OKという点も抑えておく。

 

ここでやっていることは

INSERT文にpostされた値を入れたい。

だから「:name」と名付けてVALUESに入れよう!

でもセキュリティ不安だからbindvalueを一回通して、そこからpostされた文字の変数の値を「:name」に付与しよう!

 

という処理を行っている。

 

PDO::PARAM_STR)

文字列はSTR

数字ならINT

を使えばOK

 

$status = $stmt->execute();

このexecuteで実行処理を行っている。

具体的には

$stmt = $pdo->prepare("INSERT INTO gs_bm_table2(name,author,kan,kansou,indate)VALUES(:name,:author,:kan,:kansou,sysdate());
");
$stmt->bindValue(':name', h($name), PDO::PARAM_STR); //Integer(数値の場合 PDO::PARAM_INT) 第3引数は省略出来るが、セキュリティの観点から記述している。文字列か数値はmysqlのデータベースに登録したものがvarcharaかintかというところで判断する
$stmt->bindValue(':author', h($author), PDO::PARAM_STR); //Integer(数値の場合 PDO::PARAM_INT)
$stmt->bindValue(':kan', h($kan), PDO::PARAM_INT); //Integer(数値の場合 PDO::PARAM_INT)
$stmt->bindValue(':kansou', h($kansou), PDO::PARAM_STR); //Integer(数値の場合 PDO::PARAM_INT)

 

$stmt に入れた$pdoの値やらprepareの記述

bindValueしたこと

をそっくりまとめてここでexecute();することで実行しますよー

的な

関数の呼び出しみたいに覚えておこう

 

実行結果は$statusに全て入る(それがエラーであっても正常な実行OKであっても)