プロが教えるわが家の防犯対策術!

PHPの勉強をしています。いくつか本を読んでいますが
そのなかでPDOと PEAR::MDB2という二つのデータベース抽象化レイヤーを使った演習がありますが違いがよくわかりません。(より突っ込んだ言い方をすればこれからの開発ではMDB2モジュールを使う理由がないように思います)この業界でいうところの後発有利の理に従ってデータベースへの接続はPDOで統一しても大丈夫でしょうか?
技術的な理解として
これらのレイヤーを介することで
ここのデータベースに依存しないコードの書き方が可能になるのはわかりましたが
(私のつかってる教本の質の問題かもしれませんが)
なぜ二種類用意されてるのか、なぜMDB2が非推奨でないのか(しばらくはPEARの一部として生き残るということ?)、
その動作の違い、仕様の違いがよくわかりません。
わかるのは全体的にPDOを推されてるということ。
だったらなぜMDB2の説明を含めたのか(私が持ってる5.3に対応した教本の話です)
公式マニュアルを読んでもぐぐってもわからないんです。
というかなにがわからないのかがもうわかりません。
どうか初学者のわたくしめにそれと上にある二つの技術の仕様的な違いを教えてください。
それと最近のPHP開発のデータベース事情も聞かせてもらえるとありがたいです。

A 回答 (3件)

MDB2はPEARでPHPで書かれたライブラリ


それに対してPDOは元々はPECLで提供されてきたライブラリでCで書かれているライブラリになる。
速度面でPDOは優れている。
しかも
http://www.php.net/manual/ja/intro.pdo.php
みればわかるけど5.1以降ではPECL側での提供からPHPにバンドルされるようになったので
標準で組み込まれることが多くなった。
そういう意味ではPDOと各DBのドライバがロードされている環境ならPDOを
PDOや使いたいドライバがロードされてない環境なら単純にPHPのライブラリとなるMDB2を使えばいい。
(ただしMDB2は各DBのネイティブのドライバがロードされていないと使えないけど)

MDB2でもPDOと同じくらい簡単にプリペアドステートメントは扱える。
    • good
    • 0

DB処理で最も肝となるのは『SQLインジェクション対策』です。

その最も有効な手段は「『プリペアドステートメント』を利用する事」です。そして、PHPにおいて『プリペアドステートメント』を最も手軽に利用できる手段がPDOとなります。

情報がありすぎるとかえって頭が混乱してしまうでしょうから、あるコードを自分の参考とするかどうかの判断を「プリペアドステートメントを利用しているかどうか」に絞ると良いでしょう。


> これからの開発ではMDB2モジュールを使う理由がない
正しい判断です。存在を忘れても全く問題はありません。私の個人的な見解としては、PEAR自体がもはや過去の遺物です。(反対意見も多いでしょうが、古い仕様を捨て切れてないので)

> データベースへの接続はPDOで統一しても大丈夫でしょうか?
大丈夫です。

> データベースに依存しないコードの書き方が可能になる
実際には、DBMSの勉強をする過程において途中でDBMSを切り替えるなんて事はまずありません。優先順位的に、DBMSの切り替えが楽にできるかどうかなんて事は比較的どうでも良いです。しつこいですが、肝は『プリペアドステートメント』です。

> だったらなぜMDB2の説明を含めたのか
PHP5.3を対象に考えるなら、本のページ数を稼ぐ以上の意味はないです…。PDOはPHP5.1以前は標準では使えませんでしから、古い環境を対象とするなら意味なくも無いですが…。

> 二つの技術の仕様的な違いを教えてください
データベース抽象化レイヤーを実現するために、MDB2はPHPでゴリゴリ書いてます。PDOは、PHPの拡張モジュール(なので言語はC言語になります)として、5.1からPHP本体に取り込まれました。当然後者の方が処理速度も速いです。

> 最近のPHP開発のデータベース事情
文字コード周りを全てUTF-8で統一し、PDOもしくはPDOのラッパークラスを利用するのが「開発者としての普通の感覚」ですね。


PHPは敷居の低い言語のためか、web上は元より書籍ですら、非常に程度の低いコードが掲載されている事があります。本に書いてあるから正しいという訳では決してありませんのでご注意ください。
    • good
    • 0

「phpに標準で実装されていないもの」を補完するためにPEARライブラリは拡充されてきました。



以前なら(php標準でMySQL関数しかなかった頃)ならPEAR::MDB2も魅力的な選択肢としてありましたが、今はPDOがあります(出来も良くなっています)のでわざわざPEAR::MDB2を追加で導入する意味がないです。

PEAR::DBがそうだったように(提供している)PEAR側が非推奨にすることはありますが、php公式としてはPEARの個々のライブラリについて非推奨とも何とも言及することはありません。PEARライブラリに関してはPEARのサイトで確認すべきです。当然phpの関数などについてはphp側でアナウンスされます(MySQL関数は5.5で非推奨になりましたね)。

PEAR::MDB2もそれなりに(PDO以前に)使われている経緯がありますので、サポートは継続されるとは思いますが、今から書くならPDOでいいでしょう(チューニングが要るならMySQLiという選択肢もあります)。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!