PHPを使用する場合のMySQLとMySQLiの比較[終了]


167

MySQLとMySQLiのどちらが優れていますか?なぜ?どちらを使用すればよいですか?

パフォーマンスだけでなく、その他の関連機能のほうがいいということです。

回答:


111

MySQLの改良された拡張機能の概要を見ると、2つの違いについて知っておく必要があるすべてがわかるはずです。

主な便利な機能は次のとおりです。

  • オブジェクト指向のインターフェース
  • 準備されたステートメントのサポート
  • 複数のステートメントのサポート
  • トランザクションのサポート
  • 強化されたデバッグ機能
  • 組み込みサーバーのサポート。

1
ええ、一番良いのは、mysqliが準備済みステートメントをサポートしていることです
jondinham

7
MySQLiはMySQL 5+でのみ機能することにも注意してください。これはもうあまり関係ありませんが、MySQLiが出たとき、MySQL 4はまだ標準でした。これは、拡張機能が分離されている理由の1つであり、古いMySQLドライバーは互換性のためにそこに残されています。
zneak 2013年

6
6年間で状況が大きく変化したことは注目に値します。mysql_*()は現在廃止されており、まもなく削除されます。新しいコードには使用しないでください。

CPUとRAMを少なくしてどちらを選択すればよいですか?
Mahdi Jazini、2015年

1
以下のゴードンの回答を参照してください。古いmysql拡張機能はサポートされなくなったため、とにかくmysqli拡張機能を使用することをお勧めします。
Mark Davidson

70

mysql、mysqli、PDOのいずれかを選択するのに役立つ専用のマニュアルページがあります。

PHPチームは、新規開発にはmysqliまたはPDO_MySQLを推奨しています。

mysqliまたはPDO_MySQL拡張機能を使用することをお勧めします。新しい開発に古いmysql拡張を使用することは推奨されません。詳細な機能比較マトリックスを以下に示します。3つすべての拡張機能の全体的なパフォーマンスはほぼ同じであると見なされます。拡張機能のパフォーマンスは、PHP Webリクエストの総実行時間の一部にすぎませんが。多くの場合、影響はわずか0.1%です。

このページには、拡張APIを比較する機能マトリックスもあります。mysqliとmysql APIの主な違いは次のとおりです。

                               mysqli     mysql
Development Status             Active     Maintenance only
Lifecycle                      Active     Long Term Deprecation Announced*
Recommended                    Yes        No
OOP API                        Yes        No
Asynchronous Queries           Yes        No
Server-Side Prep. Statements   Yes        No
Stored Procedures              Yes        No
Multiple Statements            Yes        No
Transactions                   Yes        No
MySQL 5.1+ functionality       Yes        No

* http://news.php.net/php.internals/53799

ライブラリ(新しいmysqlndとlibmysql)を比較する追加の機能マトリックスがあります。

と非常に徹底的なブログ記事


15

mysqliの使用を中止しました。単に不安定すぎます。mysqliを使用してPHPをクラッシュさせるクエリがありますが、mysqlパッケージを使用すると問題なく動作します。また、mysqliはLONG​​TEXTカラムでクラッシュします。このバグは少なくとも2005年からさまざまな形で発生しており、依然として壊れています。私は正直に準備されたステートメントを使用したいのですが、mysqliは十分に信頼できません(そして、誰もそれを修正する気にしないようです)。本当に準備済みステートメントが必要な場合は、PDOを使用してください。


2
PDOも完全には完璧ではありませんが(私はいくつかの厄介なコアダンプに遭遇しました)、少なくともそれはより広いユーザーベースを持っているので、おそらくより安全な賭けです。
troelskn

@troelskn、それで通常のmysqlはもっと良いのではないですか?
Pacerier 2013

@Pacerier非推奨であることを考えると、私はノーと言うでしょう。一般的に、PDOが標準的な選択になっているようです。
troelskn 2013

@troelskn、しかし非推奨とは、将来のバージョンでは存在しないことを除いて何も意味しません。安定性に関しては、通常のmysqlの方が安定していませんか?
Pacerier 2013

1
この時点で(5.5)PHPは、使用すると警告を積極的に発行します:php.net/manual/en/migration55.deprecated.php
troelskn

13

MySQLiはMySQLの改良版を意味します。これは、物事をより使いやすくするMySQLバインディングへのオブジェクト指向のインターフェースです。また、準備されたステートメントのサポートも提供します(これは非常に便利です)。PHP 5を使用している場合は、MySQLiを使用してください。


5

PDOの方が優れています。それはあまり粗雑なインターフェースではなく、MySQLiと同じ機能も提供します。

準備されたステートメントを使用すると、SQLインジェクションの可能性がなくなるため、優れています。サーバー側の準備済みステートメントを使用すると、ラウンドトリップの数が増えるため、不適切です。


3

私にとって、準備されたステートメントは必須の機能です。より正確には、パラメーターバインディング(準備されたステートメントでのみ機能します)。これは、SQLコマンドに文字列を挿入する唯一の正気な方法です。「エスケープ」機能は本当に信用していません。DB接続はバイナリプロトコルですが、なぜパラメータにASCII限定のサブプロトコルを使用するのですか?


1
PDOは通常、クライアント側の準備済みステートメントを使用するため、サーバー上で実際に準備されることはありません。準備されたステートメント「エミュレーション」は常に正しくエスケープされます。
MarkR、2009

1
「常に」と「逃げる」は一緒に行くと危険な言葉です。わからない。たぶん、このコードにはまったくバグがない。しかし、本当のバイナリプロトコルが利用できるのに、なぜわざわざ?パフォーマンスに関しては、ベンチマークの対象となります。
ハビエル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.