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で質問しましょう!
似たような質問が見つかりました
- PHP PHPSpreadsheetによる書き出し時のページネーション方法について 1 2023/03/20 10:35
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- 大人・中高年 異動願いでるべきか。行くとしたらどこか。 4 2022/05/17 05:25
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- システム スパコン「京」の本当の意義 4 2023/06/23 07:16
- PHP 【PHP/MySQL】コード上で生成したクエリを基に集計クエリを作りたい 1 2022/07/28 15:06
- JavaScript Q&Aの掲示板を作成していてヤフー知恵袋やgoo質問のように質問ごとにURLを生成したい 5 2023/08/04 01:22
- MySQL 【投稿情報用データベース posts】は必要ないと思います。 1 2022/06/02 21:25
- その他(データベース) 業務用のデータベースサーバーの選び方について 4 2022/11/22 10:22
- 法学 刑法と社会について 2 2022/07/31 01:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
tplを読みに行けません。
-
FTPコマンドでディレクトリごと...
-
PHPのif文でその処理を途中で抜...
-
URLが.PHPってどういう...
-
サーバーにアップロードしたい
-
Illustratorで文字と画像を流し...
-
JSON_UNESCAPED_UNICODEをつけ...
-
リンク先を隠す方法はないでし...
-
検索結果を2列で表示させたい
-
CFileDialogの最初のディレクト...
-
拡張子php画像をjpg画像等に変...
-
onedrive にexcelファイルをア...
-
PHPでFetalなエラーが発生した場合
-
文字化けについて
-
PHP8を使うと、大量のWarningが...
-
「クラス関数」「メンバ関数」...
-
改行コードのカウント
-
TCPDFについて
-
.htaccessファイルの修正がこれ...
-
.phpと.incファイルの違いはな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
tplを読みに行けません。
-
smarty3で変数表示について
-
PHP+Smarty+MySQLで、データベ...
-
xserver Smarty PHP+MySQL
-
PHPの関数って何種類ありますか?
-
Codeigniterの使い方を教えてい...
-
Smarty tpl内のifの書き方について
-
Smartyのテンプレート
-
Smartのカスタマイズでエラー
-
Pleskサーバ利用時にSmartyのas...
-
Smartyのif構文について
-
いつもお世話になっております。
-
PHPのWARNINGをcatchするには
-
MySQLの配置が変わったため、db...
-
onedrive にexcelファイルをア...
-
FTPコマンドでディレクトリごと...
-
Illustratorで文字と画像を流し...
-
PHP8を使うと、大量のWarningが...
-
【file_exists】ファイルが存在...
-
フォントの色を変えるには?
おすすめ情報