ホームページ  >  記事  >  バックエンド開発  >  php mysqliとmysqlの違いを詳しく解説

php mysqliとmysqlの違いを詳しく解説

WBOY
WBOYオリジナル
2016-07-25 08:56:271819ブラウズ
この記事では、PHP の mysqli クラスと mysql クラスの違いをいくつか紹介します。必要な方は参考にしてください。

まず、PHP-MySQL は、MySQL データベースを操作するための PHP の最も独創的な Extension で、PHP-MySQLi の i は Improvement の略で、比較的高度な機能を提供します。 PDO (PHP Data Object) は、データベースを操作するための抽象化レイヤーを提供します。 例:

リーリー

このメソッドは列をバインドできません。前述の SQL の説明によると、$location は SQL インジェクションを起こしやすいです。その後、mysql_escape_string() が開発されました (注: 5.3.0 以降は非推奨になりました)。 mysql_real_escape_string() はこの問題を解決します。

例:

リーリー

PHP-MySQLi では、バインドカラムによる上記の問題の解決に加えて、トランザクション、マルチクエリもサポートされ、オブジェクト指向スタイルも提供され、多くの進歩がありました (以下の PHP-MySQLi サンプル)。 例の書き方)とProceduralスタイル(上記のPHP-MySQL例の書き方)の2通りの書き方などです。

例:

リーリー

Bind Result などの欠点は少し冗長ですが、最大の問題はこれが抽象メソッドではないことであるため、実際には問題ありません。 そこで PDO が登場しました (注: 現在、Ubuntu と Debian の場合、PDO には直接インストールするパッケージはありませんが、PECL を通じてインストールする必要があります)。

例:

roga@carlisten-lx:~$ pecl 検索 pdo パッケージ安定版/(最新) ローカル PDO 1.0.3 (安定版) PHP データ オブジェクト インターフェイス。 PDO_4D 0.3 (ベータ) 4D-SQL データベース用 PDO ドライバー PDO_DBLIB 1.0 (安定版) PDO 用 FreeTDS/Sybase/MSSQL ドライバー PDO_FIREBIRD 0.2 (ベータ) PDO 用 Firebird/InterBase 6 ドライバー PDO_IBM 1.3.2 (安定版) IBM データベース用 PDO ドライバー PDO_INFORMIX 1.2.6 (安定版) IBM Informix INFORMIX データベース用 PDO ドライバー PDO_MYSQL 1.0.2 (安定版) PDO 用 MySQL ドライバー PDO_OCI 1.0 (安定版) PDO 用 Oracle Call Interface ドライバ PDO_ODBC 1.0.1 (安定版) PDO 用 ODBC v3 インターフェイス ドライバー PDO_PGSQL 1.0.2 (安定版) PDO 用 PostgreSQL ドライバー PDO_SQLITE 1.0.1 (安定版) PDO 用 SQLite v3 インターフェイス ドライバー pdo_user 0.3.0 (ベータ) PDO 用のユーザー空間ドライバー

PECL を介してインストールすると、次の方法でデータベースを操作できるようになります:

リーリー

PDO の利点: 1. PDO がデータベースに接続するとき、接続文字列を使用して接続するデータベースを決定します。 2. PDO は PDO::setAttribute を使用して、永続的な接続やエラー (例外、E_WARNING、NULL) を返す方法などの接続設定を決定できます。返されるフィールド名の場合も…など。 2. PDO は、基本的な準備と実行に加えて、列のバインド機能をサポートし、単一の列をバインドして列のタイプを指定することもできます。 4. PDO は抽象化レイヤーであるため、記憶媒体を変更した場合でも、それに比べて必要な労力は最小限です。

個人的には、ActiveRecord や Propel ORM (オブジェクト リレーショナル マッピング) などのデータベースへの接続に DBI を使用することを好みます。 たとえば、ActiveRecordを例に挙げると、次のようなSQL文を実装したい場合... INSERT INTO `users` (ID、名前、性別、場所) VALUES(1, 'roga', 'male', 'tpe') PDOの操作方法:

リーリー

ActiveRecord に関しては次のとおりです。

リーリー

mysql は非永続接続機能、mysqli は永続接続機能です。つまり Mysql は接続ごとに接続プロセスを開き、mysqli を複数回実行すると同じ接続プロセスが使用されるため、サーバーのオーバーヘッドが軽減されます。 何人かの友人がプログラミングをしているとき、彼らは new mysqli('localhost', usenamer', 'password', 'databasename'); を使用するときに必ず報告します。 間違っています、致命的なエラー: クラス 'mysqli' が d:... に見つかりません mysqliクラスはPHPに組み込まれているのではないでしょうか? Win では、php.ini を変更し、php_mysqli.dll の前の「;」を削除する必要があります。Linux では、mysqli をコンパイルする必要があります。

1: Mysqli.dll を使用すると、データベースをオブジェクトまたはプロセス内で操作でき、その使用も非常に簡単です。

mysql.dll を使用したいくつかの一般的な操作を比較します。 1、

リーリー

mysqliにも手続き型メソッドはありますが、mysqliの接頭辞から始まるだけで、他はほぼ同じです。 mysqli が手続き型で動作する場合、一部の関数では mysqli_query (リソース識別子、SQL ステートメント) などのリソースを指定する必要があります。 また、リソース識別のパラメータは前に配置され、mysql_query のリソース識別 (SQL ステートメント、「オプション」) は後ろに配置され、以前に開かれた接続またはリソースがデフォルトで指定されます。

2、mysqli.dll (オブジェクトモード):

リーリー

2、mysql_fetch_row()、mysql_fetch_array() どちらの関数も配列を返します。違いは、最初の関数によって返される配列には、$row[0]、$row[1] のみの値が含まれることです。この方法では、配列の添字を使用してデータを読み取ることができます。 mysql_fetch_array() によって返される配列には、キーと値のペアの最初のタイプと形式の両方が含まれます (データベースのフィールドが username と passwd の場合)。 $row['ユーザー名']、$row['パスワード'] また、($row as $kay => $value) で操作すると、データベースのフィールド名を直接取得することもできます。 さらに重要なのは、mysqli が php5 によって提供される新しい関数ライブラリであり、(i) は改良されており、その実行速度が速くなります。

上記は、PHP プログラミングにおける mysql と mysqli の違いです。皆様のお役に立てれば幸いです。



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。