MySQL, セキュリティ

SQLインジェクションに対応したクエリ方法 メモ

 

<?php
  $dbh = new PDO('mysql:host=DBHOST;dbname=test;charset=utf8', USERNAME, PASSWORD);
  $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);  // 静的プレースホルダを指定

  $sth = $dbh->prepare("select * from test WHERE a=? and c=?");
  $sth->setFetchMode(PDO::FETCH_NUM);
  $a = 'abc';
  $c = 1;
  $sth->bindParam(1, $a, PDO::PARAM_STR);
  $sth->bindParam(2, $c, PDO::PARAM_INT);
  $sth->execute();
  while ($data = $sth->fetch()) {
    var_dump($data);
  }

@see http://blog.tokumaru.org/2011/08/pdo.html

ポイント1

 

$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);  // 静的プレースホルダを指定

静的プレースホルダを設定する。
⇒これでSQLインジェクションはひとまず大丈夫

ポイント2

  $sth = $dbh->prepare("select * from test WHERE a=? and c=?");

ポイント3

 $sth->bindParam(1, $a, PDO::PARAM_STR);

bindParam+型指定

外部プログラマさんに説明する時は、このページを見せよう(ㆁᴗㆁ✿)

 

Amazonおすすめ

iPad 9世代 2021年最新作

iPad 9世代出たから買い替え。安いぞ!🐱 初めてならiPad。Kindleを外で見るならiPad mini。ほとんどの人には通常のiPadをおすすめします><

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)