ホームページ >バックエンド開発 >PHPチュートリアル >php mysqliとmysqlの違いを詳しく解説
この記事では、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 の違いです。皆様のお役に立てれば幸いです。 |