
PHPの勉強をしています。いくつか本を読んでいますが
そのなかでPDOと PEAR::MDB2という二つのデータベース抽象化レイヤーを使った演習がありますが違いがよくわかりません。(より突っ込んだ言い方をすればこれからの開発ではMDB2モジュールを使う理由がないように思います)この業界でいうところの後発有利の理に従ってデータベースへの接続はPDOで統一しても大丈夫でしょうか?
技術的な理解として
これらのレイヤーを介することで
ここのデータベースに依存しないコードの書き方が可能になるのはわかりましたが
(私のつかってる教本の質の問題かもしれませんが)
なぜ二種類用意されてるのか、なぜMDB2が非推奨でないのか(しばらくはPEARの一部として生き残るということ?)、
その動作の違い、仕様の違いがよくわかりません。
わかるのは全体的にPDOを推されてるということ。
だったらなぜMDB2の説明を含めたのか(私が持ってる5.3に対応した教本の話です)
公式マニュアルを読んでもぐぐってもわからないんです。
というかなにがわからないのかがもうわかりません。
どうか初学者のわたくしめにそれと上にある二つの技術の仕様的な違いを教えてください。
それと最近のPHP開発のデータベース事情も聞かせてもらえるとありがたいです。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.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と同じくらい簡単にプリペアドステートメントは扱える。
No.2
- 回答日時:
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上は元より書籍ですら、非常に程度の低いコードが掲載されている事があります。本に書いてあるから正しいという訳では決してありませんのでご注意ください。
No.1
- 回答日時:
「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という選択肢もあります)。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpのheader("Location:#pos")...
-
PHP8でWarning:Undefined varia...
-
フォームで戻った際に入力済み...
-
csvファイルについて教えて下さ...
-
セッション関数を使わずにファ...
-
composerをインストールしたい...
-
SplFileObject を利用したとき...
-
PHPSpreadsheetによる書き出し...
-
phpの問い合わせフォームを作っ...
-
marginの値でマイナス値を設定...
-
submitで思うようにページが遷...
-
HTML PHP ラジオボタンのイベント
-
php でqiitaのサイトにあったフ...
-
PHPの勉強してます。 配列のと...
-
BASIC認証のフォームをデザイン...
-
アップロードファイルを表示す...
-
複数のパソコンの中の1つのパソ...
-
返信機能のツリー構造の深さを...
-
PHPについて。
-
PHPからCSVをアップロード後、m...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Smartのカスタマイズでエラー
-
tplを読みに行けません。
-
Smarty tpl内のifの書き方について
-
これからのPHP開発ではPDOを選...
-
PHPのレガシーな設計について
-
xserver Smarty PHP+MySQL
-
PHPの関数って何種類ありますか?
-
拡張子PHP3のスクリプトを...
-
phpのheader("Location:#pos")...
-
PHPのif文でその処理を途中で抜...
-
FTPコマンドでディレクトリごと...
-
CFileDialogの最初のディレクト...
-
.phpと.incファイルの違いはな...
-
Subversionのリポジトリの削除
-
バッチを用いたフォルダの自動移動
-
onedrive にexcelファイルをア...
-
[php初心者]サイトを見てデータ...
-
makefile でファイルをコピーす...
-
【file_exists】ファイルが存在...
-
「クラウドにアップロード」」...
おすすめ情報