ホームページ  >  記事  >  バックエンド開発  >  php のリンク MySQL データベース サーバーで一般的に使用される 3 つの主要な API (mysql、mysqli、pdo) 間の違いと接続

php のリンク MySQL データベース サーバーで一般的に使用される 3 つの主要な API (mysql、mysqli、pdo) 間の違いと接続

WBOY
WBOYオリジナル
2016-07-25 09:09:041314ブラウズ
php が mysql データベース サーバーに接続するときの 3 つの主要な API (mysql、mysqli、pdo) 間の違いと接続
も一般的に使用されている拡張機能のうち、どちらがパフォーマンスが優れていますか?

実際、それらはすべて優れていますが、比較すると、いくつかの方が優れています (私は pdo が好きです)
  1. /**
  2. 関連するデータベース接続と操作をたくさん読んだ後、ここに
  3. php でのデータベース接続の概要を示します
  4. --------------------- お役に立てれば幸いです
  5. */
  6. //1 接続タイプ
  7. /**
  8. php のリンク MySQL データベースサーバーで一般的に使用される 3 つの主要な API 間の違いと接続: mysql、mysqli、pdo
  9. /********基本的な関連情報*********/
  10. a.API---------- ------アプリケーション プログラミング インターフェイス
  11. アプリケーション プログラミング インターフェイス (アプリケーション プログラミング インターフェイスの略称) は、クラス、メソッド、関数、
  12. 変数など、特定のタスクを完了するためにアプリケーションで呼び出す必要があるすべてのものを定義します。 PHP アプリケーションがデータベースと対話する必要がある場合、必要な API は通常、PHP 拡張機能 (端末の PHP プログラマーによって呼び出される) を通じて公開されます。
  13. API はプロセス指向またはオブジェクト指向にすることができます。プロシージャ指向 API の場合は関数を呼び出すことでタスクを完了しますが、オブジェクト指向 API の場合はクラスをインスタンス化し、インスタンス化後に取得したオブジェクトのメソッドを呼び出します。
  14. 2 つのインターフェースのうち、後者はより現代的で、優れた
  15. コード構造を提供するため、通常は好まれます。
  16. b.connector ----- 「アプリケーションが MySQL データベース サーバーに接続できるようにするソフトウェア コード」。
  17. PHP アプリケーションがデータベース サーバーと対話する必要がある場合、「データ
  18. ライブラリ サーバーへの接続」、「データベースのクエリ」、およびその他のデータベース関連機能などの一連のアクティビティを完了するための PHP コードを作成する必要があります。 PHP アプリケーションは、これらの API を提供するソフトウェアを使用するか、必要に応じていくつかの中間ライブラリを使用して、アプリケーションとデータベース サーバー間の対話を処理します。
  19. c. ドライバー
  20. 特定の種類のデータベース サーバーと対話するために使用されるソフトウェア コード。ドライバーは、MySQL クライアント ライブラリや MySQL ネイティブ ドライバー ライブラリなどのいくつかのライブラリ
  21. を呼び出す場合があります。 これらのライブラリは、MySQL データベース サーバーと対話するための低レベル プロトコルを実装します。
  22. おそらく人々は、コネクタとドライバーという用語を区別なく使用しています。
  23. MySQL 関連ドキュメントの「ドライバー」という用語は、特定のデータベース部分にソフトウェア コードを提供するコネクタ パッケージ
  24. として使用されます。
  25. d. 拡張機能とは何ですか?
  26. PHP ドキュメントには他にも多くの拡張機能があります。 PHP コードは、コアと、コア機能を構成するいくつかのオプションの拡張機能で構成されます。
  27. mysqli や mysql などの MySQL 関連の PHP 拡張機能はすべて、PHP 拡張機能フレームワークに基づいて実装されています。
  28. 拡張機能の典型的な機能は、API を PHP プログラマーに公開し、プログラマーが拡張機能を使用できるようにすることです。
  29. もちろん、PHP 拡張フレームワークに基づいて開発され、PHP プログラマに API インターフェイスを公開しない拡張機能もいくつかあります。
  30. たとえば、PDO MySQL ドライバー拡張機能は API インターフェイスを PHP プログラマーに公開しませんが、その上の PDO レイヤーへのインターフェイスを提供します。
  31. 拡張機能は API インターフェイスをプログラマに公開する必要がない場合があるため、API と拡張機能という用語は同じ種類のものを表しません。
  32. /*********キーポイント*******/
  33. PHP で提供される MySQL の主な API:
  34. ■PHP 用 MySQL 拡張機能
  35. (メリットとデメリット)
  36. [
  37. PHP アプリケーションが MySQL データベースと対話できるように設計および開発されました。初期の展開。 mysql 拡張機能はプロシージャ指向のインターフェイス
  38. を提供し、MySQL4.1.3 以前向けに設計されています。したがって、この拡張機能は MySQL 4.1.3 以降のデータベース サーバーと対話できますが、それ以降の MySQL サーバーが提供する一部の機能はサポートしません。
  39. ■PHP 用 Mysqli 拡張機能
  40. MySQL 拡張機能拡張機能とも呼ばれる mysqli 拡張機能を使用すると、MySQL 4.1.3 以降のバージョンの新しい高度な機能を使用できます。
  41. mysqli 拡張機能は PHP 5 以降のバージョンに含まれています。
  42. mysqli 拡張機能には、mysql 拡張機能と比較して、次のような利点があります。
  43. ■ オブジェクト指向インターフェイス
  44. ■ 準備済みステートメントのサポート (注釈: 準備については、mysql 関連ドキュメントを参照してください)
  45. ■複数のステートメント実行のサポート
  46. ■トランザクションのサポート
  47. ■強化されたデバッグ機能
  48. ■組み込みサービスのサポート
  49. ■PHP Data Object (PDO)
  50. PHP Data Object は、PHP アプリケーションにおけるデータベース抽象化レイヤーの仕様です。 PDO は、PHP アプリケーションが接続する特定のデータベース サーバー システム タイプを気にしないようにするための統合 API インターフェイスを提供します。つまり、
  51. PDOのAPIを使えば、必要なときにいつでもデータベースサーバーをシームレスに切り替えることができます
  52. /*******比較***********/
  53. PHP-MySQLは、MySQLデータベースを操作するためのPHPの最も独創的な拡張機能です。 PHP-MySQLi は Improvement の略で、拡張機能に関する限り、セキュリティも向上します。
  54. そして、PDO (PHP Data Object) は、データベースを操作するための抽象化レイヤーを提供します
  55. 詳細なソース参照: http://www.jb51.net/article/28103.htm
  56. 1.mysql および mysqli
  57. mysqli です。 php5 で提供される新しい関数ライブラリ (i) は改良を意味し、当然、より安全になります。は非永続的な接続関数であり、mysqli は永続的な接続関数です。言い換えれば、
  58. mysql は接続されるたびに接続プロセスを開き、mysqli は複数回実行するときに同じ接続プロセスを使用するため、
  59. サーバーのオーバーヘッドが軽減されます。
  60. 一部の友人は new mysqli('localhost', usenamer.プログラミング時) ', 'password', 'databasename'); は常にエラーを報告します。致命的なエラー: クラス 'mysqli' が d:... に見つかりません。
  61. mysqli クラスは PHP に含まれていませんか?
  62. Win では、php.ini を変更し、php_mysqli.dll の前の「;」を削除する必要があります。Linux では、mysqli をコンパイルする必要があります。
  63. 1: Mysqli.dll を使用すると、データベースをオブジェクトまたはプロセス内で操作でき、その使用も非常に簡単です。参照用の一般的な
  64. 詳細なソースをいくつか示します: http://www.jb51.net/article/28103.htm
  65. より多くのことを行い、あまり話すことはありません:
  66. */
  67. mysql_connect($db_host, $ db_user, $db_password);
  68. mysql_select_db($dn_name);
  69. $result = mysql_query("SELECT `name` FROM `users` WHERE `location` = '$location'"); , MYSQL_ASSOC ))
  70. {
  71. echo $row['name'];
  72. }
  73. mysql_free_result($result); 実際には、その裏にいくつかの知識があります...
  74. このメソッドは列をバインドできません前述の SQL の説明から言えば、$location は SQL インジェクションを起こしやすいです。
  75. その後、この問題を解決するために mysql_escape_string() (注: 5.3.0 以降は非推奨) と mysql_real_escape_string()
  76. が開発されました。ただし、これを実行すると、全体の説明が複雑で見苦しくなり、列が多すぎる場合があります。 , どのような状況になるかは想像できます...
  77. 詳細な出典参照:http://www.jb51.net/article/28103.htm
  78. */
  79. $query = sprintf("SELECT * FROM ユーザー WHERE ユーザー ='%s' AND パスワード='%s'",
  80. mysql_real_escape_string($user),
  81. mysql_real_escape_string($password));
  82. mysql_query($query);
  83. /**
  84. PHP-MySQLi では、バインドカラムによる上記の問題の解決に加えて、トランザクションとマルチクエリもサポートされ、オブジェクト指向スタイルも提供されています (次の PHP-MySQLi の例が記述されています)。手続き型
  85. (上記の PHP-MySQL の例の書き方) には 2 つの書き方があります...などなど。
  86. 詳細な出典参照: http://www.jb51.net/article/28103.htm
  87. */
  88. $mysqli = new mysqli($db_host, $db_user, $db_password, $db_name);
  89. $sql = "「ユーザー」 (ID、名前、性別、場所) の値を挿入 (?, ?, ?, ? )" ;
  90. $stmt = $mysqli->prepare($sql);
  91. $stmt->bind_param('dsss', $source_id, $source_name, $source_gender, $source_location);
  92. $stmt- >execute () ;
  93. $stmt->bind_result($id, $name, $gender, $location);
  94. {
  95. echo $name .性別 . $location;
  96. $stmt->close();
  97. /**
  98. しかし、ここでいくつかの欠点が見つかりました。たとえば、Bind Result は少し冗長ですが、実際には問題ではありません。なぜなら、最大の問題は、これが抽象化メソッドではないため、バックエンドがデータベースを変更するときです。痛みが始まります...
  99. それで PDO が登場しました
  100. 詳細な出典参照: http://www.jb51.net/article/28103.htm
  101. */
  102. // 2.PDO と mysql
  103. /*
  104. PDO は PHP5 以降でのみサポートされ、データベースへのアクセスに一貫したインターフェイスを使用します。ただし、国内のオープンソース プログラムの多くは、MySQL 拡張機能によって提供される関数を使用してデータベースに接続し、クエリを実行します。 PDO は非常に強力なので、成熟した国内の PHP システムはなぜ PDO を使用しないのでしょうか?
  105. 何人かの友人に PDO を使用する理由を尋ねたところ、答えは「PDO はデータベースに接続するのが速いから」です。 PDO を使用する理由?
  106. 2 つの方法の違いは何ですか?まず、パフォーマンスの問題の方が気になり、100 万個のデータを MySQL に挿入するテストを行うスクリプトを作成しました。
  107. */
  108. $link = mysql_connect("localhost", "root", "root") または die('mysql 接続エラー');
  109. $num = 100000;
  110. $dsn = "mysql:host=127.0.0.1 ;dbname=performace_test";
  111. $db = 新しい PDO($dsn, 'root', 'root', array(PDO::ATTR_PERSISTENT => true));
  112. mysql_query('TRUNCATE TABLE `performace_test`.`myquery` ',$link); //Truncate Table
  113. $query = "INSERT INTO `performace_test`.`myquery`(`goods_id`,`cat_id`,`click_count`,`goods_number`,`goods_weight`,`goods_sn`,` Goods_name`、`goods_reason`、`brand_name`、`goods_thumb`、`brand_id`、`is_on_sale`、`wap_cod`、`wap_title`、`wap_detail`、`wap_flag`、`wap_onsale`、`shop_price`、`cost_price` ,`channel_rate`,`channel_onsale`,`add_time`,`is_main`,`last_update`,`brand_logo`) VALUES ( '80','298','65','100','0.125','SMT000080' ,'健康',",'Health120','images/201004/thumb_img/80_thumb_G_1272071721054.jpg','1','0','0',NULL,NULL,NULL,'0','2980.00', ' 0.00','1.250000','1','1271612064','0','1297624384','1293649512083026412.jpg')";
  114. $start_time = microtime(true);
  115. for($i=0;$ i< ;$num;$i++)
  116. {
  117. mysql_query($query,$link);
  118. }
  119. echo "MySQL 拡張機能を使用: ". (microtime(true)-$start_time);
  120. mysql_query('TRUNCATE TABLE `performace_test` . `myquery`',$link); //テーブルを切り捨てる
  121. $start_time = microtime(true);
  122. for($i=0;$i{
  123. $db->e​​xec( $ query);
  124. }
  125. echo "rnUSE PDO: ". (microtime(true)-$start_time);
  126. /**
  127. USE MySQL 拡張子: 95.233189106s
  128. USE PDO: 99.1193888187s
  129. ほぼリンク MySQL に違いはありません。 PDO によるパフォーマンスの低下はまったく無視できます。
  130. しかし、MySQL 拡張ライブラリにはない操作もたくさんあります:
  131. 1: PDO は、最下層に実装された真に統合されたインターフェイスのデータベース操作インターフェイスです
  132. 2: PDO は、次のようなより高度な DB 機能の操作をサポートします。ストアド プロシージャなどのスケジュールは、mysql ネイティブ ライブラリではサポートされていません。
  133. 3: PDO は PHP の公式 PECL ライブラリであり、その互換性と安定性は MySQL Extension よりも高い必要があります。pecl upgrade pdo コマンドを直接使用してアップグレードできます。
  134. PHP6 もデフォルトで使用されます。PDO がデータベースリンクを実行し、MySQL Extension が支援します。
  135. そのため、私たちの日々のプロジェクトでは、環境が許せば、可能な限り PDO を使用して MySQL データベース操作を実行するようにしています。
  136. ?>
  137. コードをコピー
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。