web-dev-qa-db-ja.com

MySQL、MySQLi、PDOの違いは何ですか?

MySQL、 MySQLiPDO の違いは何ですか?

PHP-MySQLで使用するのに最適なのはどれですか?

123
Chintan Parekh

PHPからMySQLを使用するには、3つ以上の一般的な方法があります。これは、いくつかの機能/相違点の概要を示しています PHP:APIの選択

  1. 非推奨mysql functions は手続き型であり、手動エスケープを使用します。
  2. MySQLi は、オブジェクト指向および手続き型バージョンのmysql関数の代替です。準備済みステートメントをサポートしています。
  3. PDO (PHP Data Objects)は、他の多くのデータベースの中でもMySQLをサポートする一般的なデータベース抽象化レイヤーです。準備されたステートメントと、データが返される方法に大きな柔軟性を提供します。

準備済みステートメントでPDOを使用することをお勧めします。これは適切に設計されたAPIであり、必要に応じて別のデータベース( ODBC をサポートするデータベースを含む)に簡単に移動できます。

94

これらは、MySQLバックエンドにアクセスするための異なるAPIです

  • mysql は歴史的なAPIです
  • mysqli は、歴史的なAPIの新しいバージョンです。パフォーマンスが向上し、機能セットが向上するはずです。また、APIはオブジェクト指向です。
  • PDO_MySQL は、PDO用のMySQLです。 PDOはPHPで導入されており、プロジェクトはすべてのデータベースアクセスに共通のAPIを作成することを目的としているため、理論的には、コードを変更せずにRDMS間で移行できるはずです(クエリで特定のRDBM関数を使用しない場合) )、またオブジェクト指向。

したがって、どの種類のコードを作成するかによって異なります。オブジェクト指向のレイヤーまたはプレーン関数を好む場合...

私のアドバイスは

  1. PDO
  2. MySQLi
  3. mysql

また、私の考えでは、mysql APIはPHPの将来のリリースでおそらく削除されるでしょう。

42
RageZ

3つのAPI機能を比較する table があります。 PDOの後にリリースされた最新のMysqliを可能な限り使用し、将来的にはより適切に保守されます。

7
Elzo Valugi

mysqli は、mysqlの拡張バージョンです。

PDO拡張 は、PHPのデータベースにアクセスするための軽量で一貫したインターフェースを定義します。 PDOインターフェースを実装する各データベースドライバーは、データベース固有の機能を通常の拡張機能として公開できます。

3
Sarfraz

具体的には、MySQLi拡張機能は、古いMySQL拡張機能に比べて次の非常に便利な利点を提供します。

OOPインターフェイス(手続き型に加えて)プリペアドステートメントのサポートトランザクション+ストアドプロシージャのサポートより良い構文速度の改善強化されたデバッグ

PDO拡張

PHP Data Objects拡張は、データベース抽象化レイヤーです。特に、これは多くのデータベースエンジン(もちろんMYSQLを含む)のドライバーを提供するため、MySQLインターフェイスではありません。

PDOは、データベースエンジンが変更されたときに、これを反映するコード変更が最小限であることを意味する一貫したAPIを提供することを目的としています。 PDOを使用する場合、使用しているドライバーを変更するだけで、コードは通常、多くのデータベースエンジン間で「機能する」だけです。

PDOは、データベース間の互換性に加えて、MySQLドライバーを使用しながら、準備済みステートメント、ストアドプロシージャなどもサポートします。

3
user1776226