研修(PEAR::DBでのクエリ送信とインジェクション対策)
PEAR::DBでクエリを送信する。
// クエリ作成 $query = "SELECT * FROM db_name"; // クエリ送信 $res =& $db->query($query); // エラーがあったら表示 if(DB::isError($query)){ print $query->getMessage(); }
$res =& $db->query(クエリ文)でクエリを送信。
エラー処理も必ず明記すること。
■インジェクション対策
PEAR::DBでのインジェクション対策はプレースホルダーを使う。
・インジェクション
想定しないSQL文を実行することによって、データベースが不正に操作する攻撃方法。
プレースホルダーの方法は以下のとおり。
// クエリ作成 $sql = 'select * from shouhin where id > ? and id < ? '; // 入力値を配列に格納 $data = array(1, 4); // クエリ送信(第2引数に入力値配列を指定) $res =& $db->query($sql, $data); if (PEAR::isError($res)) { die($res->getMessage()); }
クエリに対し、入力値の部分を「?」に置き換える。
そして入力値を全て配列に格納する。
(入力値が1つの場合は、値指定のみでおk)
最後に、クエリ送信関数の第2引数に配列を指定する。
これで入力値に特殊文字があった場合、
自動でエスケープ処理が行われる。
MySQLのエスケープ処理よりだいぶ楽。