FC2ブログ

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;
で中身を確認すると
今回挿入した内容が反映されているのが確認できる

どちらでも同じだけど
ソースコードのメンテなどの保守も考えると
わかりやすいほうを選ぶほうがよいと思う
スポンサーサイト



テーマ : プログラミング
ジャンル : コンピュータ

コメント

非公開コメント

最新記事
検索フォーム
GREEハコニワ攻略サイト
リンク
カテゴリ
月別アーカイブ
フリーエリア
最新記事
FXプライムレート
最新コメント
最新トラックバック