PHPには、MySQLを操作するための3つのAPI、 mysql 、 mysqli 、およびPDOがあります。 3つはすべてCの拡張機能として実装されています。
これらのAPIの中で最も古いものはmysqlです。 この拡張機能はPHP 3に登場し、4.1より前のMySQLバージョン(バージョン<4.1)をサポートしていました。 古いバージョンにはいくつかの問題があります(> = 4.1)。 mysql APIは、MySQLの新しいバージョンの一部の機能をサポートしていません。
その後、 mysqli拡張モジュールが登場しました (おそらくmysqlが改善されました )。 このAPIは、MySQL DBMSのすべての新機能をサポートしています。 さらに、 mysqliを使用すると、OPP構文を手続き型とともに使用できます。 バージョン5以降、 mysqli拡張モジュールは PHPに同梱されています。
3番目のAPIはPDO (PHPデータオブジェクト)と呼ばれます。 一般的な意味では、これはMySQLのAPIであるだけでなく、特定のDBMSからの抽象化層でもあります。 すでに述べたように、 PDOはPHPの拡張機能として提供されます。 そのため、この拡張機能とともに、特定のDBMS用のドライバーが提供されます。SQLiteから始まり、Oracleで終わります。
これらのAPIは、MySQLとの直接通信に同じライブラリを使用しているという事実によって統一されています。 標準のMySQLクライアントライブラリ( libmysql )を使用します。 このライブラリはCで記述されており、ちなみにPHPのクライアントアプリケーションだけでなく、Perl、C / C ++、Rubyなどにも使用されています。
そのため、長い間(2007年の初めから)、MySQL Native Driver( mysqlnd )を使用することが可能です。 これは何ですか 概念的には、これはlibmysqlの代替です。 そして、その実装全体が(もちろんC言語のレベルで)PHPと密接に絡み合っており、PHPライセンスに従って配布されているため、「ネイティブ」(ネイティブ、組み込み)であることは当然のことです。
実際、PHP5.3 / 6からmysqlndがlibmysqlを置き換えるようになったことは魅力です。 この場合、APIはまったく影響を受けません。開発者にとって、移行プロセスは透過的であることが約束されています。mysql 、 mysqli 、およびPDO APIを使用して以前に記述されたコードはすべて時計仕掛けのように機能します。
概略的には、次のようになります。
![画像](http://smages.com/i/61/39/613929f46723418c96da193e0f6a9a6f.gif)
MySQL Native Driverの利点は、PHP内部に密接に関連するその性質にあります。 mysqlndは、PHPに組み込まれているいくつかの関数を使用しますが、これらの関数はパフォーマンスに影響します。
いずれにせよ、MySQL Native Driverの内部構造とその利点を研究することは、別のメモや記事に値するものです。
MySQL Native Driverに関するこの入門書が、少なくとも少し役立つことを願っています。