[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
>ユーザー入力を受け取ってSQL文を動的に生成する場合は プリペアドステートメント と プレースホルダ を使わなければなりません.
プレースホルダ:
直訳すると「場所取り」.何かユーザ入力を当てはめる場所としてあらかじめ確保しておくもの.
プリペアドステートメント:
直訳すると「予約文」.文を予約したもの.通常,「予約文」は「場所取り」を使うために作られる.もし「場所取り」が無ければ普通に PDO::query などで実行するだけで十分なためである.
fetch
>カーソルをずらしながら,指定したフェッチモードで1行ずつ取得していきます.
引数を省略した場合はデフォルトフェッチモードが使用される.
全ての取得が終わると常に false を返す.
>プレースホルダは、SQL文の中で「ユーザーが入力した値」を代入する箇所に使用します。
例えば以下のようなSQL文があった場合、
INSERT INTO user (user_screen_name) VALUES ('ハルジオン');
末尾にある「ハルジオン」という部分は、ユーザーによって入力される値です。(逆に、他の部分は固定文となります)
プレースホルダを使わずに、上記のようにユーザーから入力された値を直接SQLに結合してしまうと、万が一、悪意のあるユーザーによって不正な値が入力された場合、SQL文が壊れてしまったり、別のSQL文に変えられてしまう恐れがあります。
こういった攻撃手法を「SQLインジェクション」と言います。
これに対策するために、以下のようにプレースホルダを使います。
INSERT INTO user (user_screen_name) VALUES (:user_screen_name);
プレースホルダを使うと、その部分はあくまで「値」として処理し、
SQL文として実行されることはなくなりますので、安全に実行出来るというわけです。