初めてのシステムと日記

システムも日記も初めてです。

研修(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のエスケープ処理よりだいぶ楽。