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

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

Jul 25, 2016 am 09:09 AM
mysqli

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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP 致命的エラーの解決策: 未定義関数 mysqli_connect() の呼び出し PHP 致命的エラーの解決策: 未定義関数 mysqli_connect() の呼び出し Jun 23, 2023 am 09:40 AM

PHP を使用して Web アプリケーションを作成する場合、データの保存に MySQL データベースがよく使用されます。 PHP は、MySQLi と呼ばれる MySQL データベースと対話する方法を提供します。ただし、MySQLi を使用している場合、以下に示すようなエラー メッセージが表示されることがあります。 PPHPFatalerror:Calltounknownfunctionmysqli_connect() このエラー メッセージは、PHP が MySQLi を見つけられないことを意味します。

php が mysqli に接続できない場合はどうすればよいですか? php が mysqli に接続できない場合はどうすればよいですか? Nov 09, 2022 am 10:07 AM

php が mysqli に接続できない場合の解決策: 1. 「php.ini」ファイルを開きます; 2. 「mysqli.reconnect」を見つけます; 3. 「mysqli.reconnect = OFF」を「mysqli.reconnect = on」に変更します。

PHP PDO と mysqli: 比較対照 PHP PDO と mysqli: 比較対照 Feb 19, 2024 pm 12:24 PM

PDOPDO は、PHP に統合インターフェイスを提供するオブジェクト指向のデータベース アクセス抽象化レイヤーであり、同じコードを使用して異なるデータベース (Mysql、postgresql、oracle など) と対話できるようにします。 PDO は、基礎となるデータベース接続の複雑さを隠し、データベース操作を簡素化します。長所と短所 長所: 統一されたインターフェイス、複数のデータベースのサポート、データベース操作の簡素化、開発の困難さの軽減、プリペアドステートメントの提供、セキュリティの向上、トランザクション処理のサポート 短所: パフォーマンスはネイティブ拡張よりわずかに低い場合があり、外部ライブラリに依存し、オーバーヘッドが増加する可能性があります。デモ コードでは PDO を使用します。 mysql データベースに接続します: $db=newPDO("mysql:host=localhost;dbnam

PHP 警告: mysqli_connect(): (HY000/2002): 接続が拒否された場合の解決策 PHP 警告: mysqli_connect(): (HY000/2002): 接続が拒否された場合の解決策 Jun 23, 2023 am 08:54 AM

PHP を使用して MySQL データベースに接続するときに次のエラー メッセージが表示された場合: PHPWarning:mysqli_connect():(HY000/2002):Connection拒否された場合は、以下の手順に従ってこの問題の解決を試みることができます。 MySQL サービスが正常に動作しているかどうかを確認するには、まず MySQL サービスが正常に動作しているかどうかを確認する必要がありますが、サービスが動作していない、または開始に失敗している場合は、接続拒否エラーが発生する可能性があります。あなたはできる

mysqlの実行ファイルとは何ですか mysqlの実行ファイルとは何ですか Apr 11, 2023 am 10:38 AM

mysql の実行ファイルは mysqld です。mysqld は、Mysql サーバー プログラムを表す実行可能ファイルです。このファイルを実行すると、サーバー プロセスを直接開始できます。mysqld_safe は、間接的に mysqld を呼び出し、モニターも開始する起動スクリプトです。 。

PHP で MySQLi を使用してデータベース接続を確立するための詳細なチュートリアル PHP で MySQLi を使用してデータベース接続を確立するための詳細なチュートリアル Jun 04, 2024 pm 01:42 PM

MySQLi を使用して PHP でデータベース接続を確立する方法: MySQLi 拡張機能を含める (require_once) 接続関数を作成する (functionconnect_to_db) 接続関数を呼び出す ($conn=connect_to_db()) クエリを実行する ($result=$conn->query()) 閉じる接続 ( $conn->close())

PHP 致命的エラーの解決策: 未定義メソッド mysqli::prepare() の呼び出し PHP 致命的エラーの解決策: 未定義メソッド mysqli::prepare() の呼び出し Jun 23, 2023 am 11:21 AM

mysqli 拡張機能を使用して MySQL データベースに接続し、操作すると、PHPFatalerror:Calltoundefinemethodmysqli::prepare() エラーが発生することがあります。このエラーは通常、次の理由によって発生します: PHP での mysqli 拡張機能のサポートが不十分であること、mysqli 拡張機能が正しくロードまたは構成されていないこと、PHP コードに構文エラーがあること、MySQL サーバーが正しく構成または実行されていないこと

PHP 致命的エラーの解決策: 未定義関数 mysqli_stmt_bind_param() の呼び出し PHP 致命的エラーの解決策: 未定義関数 mysqli_stmt_bind_param() の呼び出し Jun 23, 2023 am 10:43 AM

PHP を使用して Web サイトを開発する場合、データベース操作は非常に一般的です。 MySQLi は、MySQL データベースを操作するために PHP で一般的に使用される拡張機能で、比較的完全なオブジェクト指向インターフェイス、手続き型インターフェイスを提供し、プリペアド ステートメントの操作をサポートします。しかし、mysqli のプリペアド ステートメントを使用すると、次のようなエラーが発生することがあります。

See all articles