PHP MYSQL INSERT編 2 データ登録SQLについて
//3.データ登録SQL作成
$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であっても)