PHP + MySQL のデータ挿入

PHP + MySQL のデータ挿入
#03 データを挿入してみよう (1)
http://dotinstall.com/lessons/basic_php_advanced/6903
を参考に
プリペアステートメントを使ったDBへのデータ挿入を学習
SQL文をつくるとき
データをエスケープしなくてはならない場合
プリペアードステートメントを使うのが一般的
エスケープさせるのは
DB破壊されるのを防いだり
いろいろと悪意あるコードを使われるのを防ぐため
いままでは
query()をつかっていたけど
プリペアードステートメントを使う場合には
prepare() をつかってSQLを発行する
$stmt = $dbh->prepare(“insert into users(name,email,password) values(?,?,?)”);
values() の中身が
?,?,?
となっているけど、これはプレースホルダーといって
ここにはいる命令を次の文に埋め込むときに使われる
埋め込むには
execute() をつかい、配列で与える
今回なら
name = n
email = e
password = p
という単純なものにするので
$stmt->execute(array(“n”,”e”,”p”));
とする
最後にわかりやすくするため
echo “done”;
としてページを開くと
DBにデータがかきこまれている
確認するには
mysql -u root -p
でログインして
use blog_app;
select * from users;
で中身を確認すると
今回挿入した内容が反映されているのが確認できる
ちなみに、後から書き込むための
?,?,?
ではわかりにくい場合
別の書き方がある
この場合、?の代わりに :変数名
というようにする
今回なら
values (?,?,?)
の代わりに
values (:name,:email,:password)
というようにしている
この場合だと
execute() の中身も
execute(array(“n”,”e”,”p”))
から
連想配列のように
execute(array(“:name”=>”n2″,”:email”=>”e2″,”:password”=>”p2″)
というように
先にプレースホルダーで指定した
:変数名=>
が各値につくようになる
確認するには
mysql -u root -p
でログインして
use blog_app;
select * from users;
で中身を確認すると
今回挿入した内容が反映されているのが確認できる
どちらでも同じだけど
ソースコードのメンテなどの保守も考えると
わかりやすいほうを選ぶほうがよいと思う

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です