忍者ブログ

からすまる日誌

20200209 覚え書き プレースホルダ

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

20200209 覚え書き プレースホルダ

>ユーザー入力を受け取って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文として実行されることはなくなりますので、安全に実行出来るというわけです。

PR

コメント

ブログ内検索

カレンダー

03 2025/04 05
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30