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

※この記事は読者によって投稿されたユーザー投稿のため、編集部の見解や意向と異なる場合があります。また、編集部はこの内容について正確性を保証できません。

ヒューマンリソシア株式会社はコラム「プリペアドステートメントのインタフェース」を公開しました。

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

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

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メソッドを殺す」ことも可能ですが。ちなみにこれは「オーバーライド」と呼称します。「上位クラスのメソッドの再定義(上書き)」ですね。

この続きは以下をご覧ください
http://resocia.jp/column/16/

この記事が役に立ったらシェア!
みんなが読んでるWeb担メルマガで、あなたも最新情報をチェック
  • SEOやデジタルマーケの最新情報をゲット
  • 事例やインタビューも見逃さない
  • 要チェックのセミナー情報も届く
みんなが読んでるWeb担メルマガで、あなたも最新情報をチェック
  • SEOやデジタルマーケの最新情報をゲット
  • 事例やインタビューも見逃さない
  • 要チェックのセミナー情報も届く

Web業界の転職情報

もっと見る
Sponsored by

人気記事トップ10(過去7日間)

今日の用語

ナビゲーション
サイトの訪問者が、サイト内で目的のコンテンツを探したり、サイト内の他のコンテンツ ...→用語集へ

連載/特集コーナーから探す

インフォメーション

Web担のメルマガを購読しませんか?
Web担の記事がコンパクトに毎週届くメールマガジン「Web担ウィークリー」は、10万人が読んでいる人気メルマガ。忙しいあなたの情報収集力をアップさせる強い味方で、お得な情報もいち早く入手できます。

Web担に広告を掲載しませんか?
購読者数10万人のメールマガジン広告をはじめとする広告サービスで、御社の認知向上やセミナー集客を強力にお手伝いいたします。

サイトマップ
RSSフィード


Web担を応援して支えてくださっている企業さま [各サービス/製品の紹介はこちらから]