2011-09-14 20 views
3

インターネットを介して一種の研究をした後(そしてStackoverflowで)、私はまだどの方法が学習/使用に最も適しているか決定するのに苦労しています。 PHPでプログラミングするときにもっと掘り下げてください。PHP | PEAR:MDB2とPDOとNative-PHP(Raw)との比較

DAOを使用する利点は、アプリケーションファイル全体に広がったmysql_ *関数を使用してDBを処理する場合に理解できます。

それはPDO対MDB2間で決定しています - PDOの賛成で輝く一つのことは、それだけでmysql_としてMySQL APIに直接話し機能*それは抽象的mysql_ないという事実である*やります。それはまた、PHPのコンパイルされたCの拡張ですので、非常に高速です。 MDB2(または他のライブラリ)はPHPで書かれているので、実行時に解析され、mysql_ *関数の上に座る必要があります。したがって、スピードの面ではPDOが勝利するのですか?

それは方法はほとんどのSQLインジェクション攻撃を防ぐことができますバインダーのparamsを使用しての方法で、DB抽象化層の セキュリティ上の利点(プリペアドステートメントを)輝くネイティブ非抽象化され、PHP上DB抽象化層を比較するために来ますまた、RDBMSのタイプを将来必要に応じて切り替える方が簡単です(それは一般的ではありませんが)。(DAOライブラリには他にも利点があり、時間がかかります。

とにかく私はこれらの図書館の1つを使用すべきではないかと判断するのに役立つ専門家がいることを願っています。もしそうなら、どちらが最もおすすめですか?私のすべてのプロジェクトは何年も改善されるでしょうか?

ありがとうございました。

+0

PDOにはコンパイルされたコンポーネントが含まれている可能性がありますが、「未処理」のインターフェイスではまだ処理されていません。まだオーバーヘッドはありますが、別の場所にあります。ここから得られる唯一の良い答えはpdo v.sを試すことです。 mdb2 v.s.あなたの特別なケースでどちらが良いかを見てください。 –

+0

私はPEARを実践しました:MDB2 - ジレンマは、それらのライブラリの1つ(MDB2、PDO、ADOdb ..)を使用する場合と、もしどちらかが最も推奨される場合(基本的にすべて同じ構文異なる)、または私は自分のDAOを抽象化する必要があります - 私はコードがどのように見えるかを正確に知っているでしょう、私は3次元コードに傾倒するのではなく、私が理解しているところからプラスPDOは他のライブラリを実行して、mysql_ *関数の上に構築された抽象化の代わりにデータベースと直接通信します。 – Adam

+0

mysql _ *()は抽象化ではありません。 PDOと同様に、それらは基礎となるlibmysqlクライアントライブラリへの直接呼び出しです。 mysql _ *()は、より直接的にライブラリ呼び出しにマップするだけです。 –

答えて

4

自身に質問をする:

  • がボトルネックに私のコードです、またはそれがデータベースのですか?データベースに対して何千もの簡単なクエリを実行しているときは、PHPコードが遅いことが問題になります。リクエストごとに数十回のクエリを実行する場合、dbレイヤのオーバーヘッドはおそらく目に見えません。
  • 別のDBシステムに切り替える必要はありますか?とにかくDMBSにロックされている可能性が高いため、相互運用性について気にする必要はありません。

また、MDB2はかなり老化しています。もし私があなただったら、私はDoctrine DBALを使います。Doctrine自体がなくても使用でき、PDOの上に座っています。私は古い "ネイティブ" mysql_ *関数を使用しません。

+0

基本的に抽象レイヤーを使用するほうが、DBに対して数十回以上のクエリーがある場合を除いてほとんどのケースで使用することをお勧めします。抽象化するときでも、 "native:mysql _ *()独自のDBクラス抽象化レイヤーライブラリ? PDCの上に座っているならば、DBCALは機能の欠如のためにPDOを使用しているのですか? MDB2が古いことはよく知っています。 ありがとう! – Adam

関連する問題