建設、電気・電子、機械、メディカルなど求人が豊富!転職エージェントならヒューマンタッチ キャリアエージェント

0120-91-7565 通話無料:受付時間(月~金10:00 ~ 20:00)

ヒューマンタッチ キャリアエージェント 人間味あるプロの転職サポートを。

無料転職支援サービス
に申し込む

0120-91-7565 通話無料:受付時間(月~金10:00 ~ 20:00)
建設転職ナビリニューアルキャンペーン実施中

プリペアドステートメントのインタフェース

PHPer上級者になるために知っておきたいこと

(2015/11/25)

前回の続きになります。
前回は「?を使った」プリペアドステートメントのインタフェースをみましたが…あれ、順番を間違えると色々と悲劇や喜劇が起きるんですね。
なので、筆者は個人的にはあんまりお勧めしません。

んじゃどうするのかというと「名前付き」というのを用います。
説明するよりもコードを見てもらった方が早いと思うので、早速、まずはコードを見ていただきましょう。

MDB2の場合

$st = $mbd2_dbh->prepare('SELECT * FROM hoge_table WHERE hoge_id = :hogeid and hoge_string = :hogestring ;', array('integer', 'text');
$res = $st->execute( array('hogeid' => 100, 'hogestring' => 'hoge_main') );

PDOの場合

$st = $pdo_dbh->prepare('SELECT * FROM hoge_table WHERE hoge_id = :hogeid and hoge_string = :hogestring ;');
$st->bindValue(':hogeid', 100, PDO::PARAM_INT);
$st->bindValue(':hogestring', 'hoge_main', PDO::PARAM_STR);
$res = $st->execute();

MDB2の場合は「連想配列のキーがプレースホルダの名前に対応するように」する必要があります。:は不要ですね。
一方でPDOの場合は、bindValueの第一引数に名前を指定して、こちらは「:を含む」文字列にする必要があります。

もう一つ、インタフェースの話で割と見落としやすいところを。少し話は巻き戻りますが「DB接続時のエラー補足」が、両者で大分と趣を異にします。
MDB2はPEAR::isErrorというものを用いて判定をしますが、PDOは接続エラー時には例外を投げます。このあたりも「基本的な仕様」として、頭の片隅に入れておくとよい試験対策になるかと思います。

もう一点注意をしていただきたいのが。
コラムの4回目で「一端、PDO::queryで書き直して」と書いたので或いは気づかれている方もいらっしゃるかと思いますが、PDO使おうがMDB2使おうが「SQL-Injectionの可能性のある、危険なSQLを発行する」事は十分に可能です。
もちろん、継承で上書いて「queryメソッドを殺す」ことも可能ですが。ちなみにこれは「オーバーライド」と呼称します。「上位クラスのメソッドの再定義(上書き)」ですね。

class customPDO extends PDO {
  public function __construct() {
    return parent::__construct('mysql:dbname=xxxx;host=localhost', 'アカウント名', 'パスワード');
  }
  // queryメソッドを殺す
  public function query(string $sql) {
    // 適切に、例外を投げるなりエラーログに書き込むなり
  }
}

何をやろうとも、しでかす人は「力尽くで」しでかしてくるので。具体的には「自力で(エスケープ処理もせずに)SQLの文字列を組み立てて」「prepareメソッド経由executeメソッド行き」とか。
ですので、オーバライド等による強制といった方法よりは「きちんと教育をする」「ソースコードレビューを適切に行う」ほうがセキュリティ的な効果は高いのではなかろうか? と思います。

さて。では「MDB2とPDOのどちらを使う?」というお話になってくるのですが。
いくつか論点はあるのですが、そのうちの一つに「PEARとPECL」というお話しが出てくるかと思います。
PECLは(残念なことに)上級試験の出題範囲外なのですが、PEARは管理コマンドなどが出題範囲になりますので。次回から「PECLとPEAR」について学んでいきたいと思います。

  • このエントリーをはてなブックマークに追加

 「PHPer上級者になるために知っておきたいこと」 コラム一覧

←コラム一覧に戻る

コラムニストのご紹介

古庄道明氏

古庄道明氏

PHP技術者認定上級試験レベルの内容をまとめてみた!

1970年浅草生まれ 1995年に富士通系のソフトハウスに就職しプログラマに転身。1999年個人事業主として独立し現在に至る。「寺子屋」「格子組」といったエンジニア支援活動を独自に展開し、占い師時代の「ガルーダ」という占い師名にちなんだ「がる先生」の愛称で親しまれている。

コンサルティングからシステム設計、ネットワークにセキュリティと守備範囲は比較的多岐に渡る。「技術の基本は、その技術がない時の“困ってる”が根っこ」をモットーに、古い話から現代へ歴史をたどるように教えるのが持ち味。

おすすめコラム

注意事項

本サイトに掲載されているテクニカル・コラムは、掲載時点で公開されている情報をもとに執筆者の視点で書かれたものです。弊社及び執筆者は本テクニカル・コラムの内容について一切保証をいたしません。また、技術的な問い合わせについても対応いたしかねますので予めご了承ください。

専門のキャリアコンサルタントが、あなたの転職を徹底サポート。

最新の求人が新着順に5件掲載されます。

新着求人help

ページトップへ