通常の状況では、PHP を使用して構築されたアプリケーション システムは MySQL データベースとペアになっており、長い間、mysql 拡張機能は PHP と MySQL に付属しており、この 2 つの間の対話のためのチャネルを提供してきました。 mysql 拡張ライブラリによって提供される関連関数により、PHP プログラムは MySQL データベースに簡単にアクセスできるようになります。ただし、MySQL の開発に伴い、mysql 拡張機能は MySQL 4.1 の新機能をサポートできないため、新たな問題が発生し始めます。より高い。
mysql 拡張機能の欠点に直面して、PHP 開発者は、mysqli 拡張機能である PHP 5 をサポートする新しい MySQL 拡張プログラムを作成することにしました。
1 mysqli の概要
mysqli 拡張機能を使用すると、ユーザーは MySQL 4.1 以降の新機能を利用できるようになります。mysqli 拡張機能と比較して、mysqli 拡張機能は次の点で大幅に改善されています。
l 互換性と保守性: mysqli 拡張機能は MySQL の新機能を簡単に使用できるため、mysqli は MySQL との互換性が高くなります。 MySQL の新しいバージョンにさらに多くの機能がある場合でも、mysqli 拡張機能はそれらを簡単にサポートできます。
l オブジェクト指向: mysqli 拡張機能はクラスにカプセル化されているため、オブジェクト指向プログラミングを使用できます。オブジェクト指向を理解していなくても、mysqli 拡張機能はユーザーが選択できるプロセス指向のプログラミング手法も提供します。
l 速度とセキュリティ: mysqli 拡張機能は、以前のバージョンの mysql 拡張機能よりもはるかに高速に実行されます。 mysqli 拡張機能は、パスワード ハッシュ (Password Hashes) と MySQL の新しいバージョンの検証手順をサポートしており、アプリケーションのセキュリティがさらに向上します。
l 準備されたステートメント: 準備されたステートメントは、再利用されたステートメントのパフォーマンスを向上させることができ、mysqli 拡張機能は準備されたステートメントのサポートを提供します。
l デバッグ機能: mysqli 拡張機能によりデバッグ機能がさらに向上し、開発効率が向上します。
PHP で mysqli 拡張機能を使用するには、構成ファイル php.ini に次の設定を追加する必要があります:
extension=php_mysqli.dll
上記の設定が既に構成ファイルにある場合は、次の設定が存在しないことを確認してください。拡張子の前に「;」がある場合は、それを削除します。 mysqli 拡張機能を使用してデータベースにアクセスする方法から始めましょう。
2 サーバーへの接続と切断
Mysqli には、データベースと対話するためのオブジェクト指向とプロセス指向の 2 つの方法が用意されています。これら 2 つの方法をそれぞれ見てみましょう。
1.オブジェクト指向
オブジェクト指向のアプローチでは、mysqli はクラスにカプセル化され、その構築方法は次のとおりです:
__construct ([ string $host [, string $username [, string $passwd [, string $dbname
] ] , int $port [, string $socket ]]]]]] )
上記の構文に含まれるパラメータは次のように説明されます。
l ホスト: 接続されているサーバーのアドレス。
l ユーザー名: データベースに接続するためのユーザー名。デフォルト値はサーバープロセス所有者のユーザー名です。
l passwd: データベースに接続するためのパスワード。デフォルト値は空です。
l dbname: 接続されているデータベースの名前。
l ポート: TCP ポート番号。
l ソケット: UNIX ドメインソケット。 mysqlとの接続を確立するために、次のコードなど、コンストラクターメソッドを使用してMySQLIクラスをインスタンス化できます。
$db_psw="root"; // 接続されたデータベースの名前
$mysqli=new mysqli($db_host,$db_user,$db_psw,$db_name);接続先のメンバーメソッド connect() MySQL。空のコンストラクターを使用して mysqli クラスをインスタンス化する場合、mysqli オブジェクトで connect() メソッドを呼び出すことによって、MySQL に接続することもできます。たとえば、次のコード:コード 23-26 CD コード 第 23 章 23.5connect.php
< ;?php mysqli オブジェクトの close() メソッドを呼び出して作成されます。例:
$mysqli->close(); 2.プロセス指向
プロセス指向のアプローチでは、mysqli 拡張機能は MySQL との接続を確立する関数 mysqli_connect() を提供します。この関数の構文形式は次のとおりです。
mysqli mysqli_connect ([ string $host [, string. $ username [、string $ passwd
to qli_connect()関数の使用例:
コード23-27 CDコード第23章23.5mysqli_connect.php ","root","sunyang"); $ IF ($ Connection) {
Echo "データベース接続に成功しました";
} Else {
"データベース接続に失敗しました"; ();
3 mysqli を使用したデータ アクセス
mysqli を使用したデータ アクセスには、オブジェクト指向メソッドとプロセス指向メソッドも含まれます。このセクションでは、オブジェクト指向メソッドを使用して MySQL と対話する方法についてのみ説明します。プロセス指向のアプローチについてはここでは詳しく紹介しません。興味のある読者は公式ドキュメントを参照して関連情報を入手してください。
mysqli では、query() メソッドを使用してクエリを実行します。このメソッドの構文形式は次のとおりです。
混合クエリ ( string $query [, int $resultmode ] )
上記の構文に含まれるパラメーターについては、以下で説明します。
l クエリ: SQL ステートメントがサーバーに送信されます。
l resultmode: このパラメータは 2 つの値を受け入れます。1 つは MYSQLI_STORE_RESULT で、結果がバッファリングされたセットとして返されることを示し、もう 1 つは MYSQLI_USE_RESULT で、結果がバッファリングされていないセットとして返されることを示します。
以下は、query() メソッドを使用してクエリを実行する例です。
コード 23-28 CD コード 第 23 章 23.5query.php
$mysqli=new mysqli("localhost" ,"root" ,"root","sunyang"); //mysqli をインスタンス化します
$query="select * from 従業員"$result=$mysqli->query($query);
if ( $ result){
while($ row = $ result-&gt; fetch_array()){echo($ row [2])。 "; br>"
" ;$result->free();
$mysqli->close();
上記のコードでは、num_rows は結果セット内の行数を返します。 fetch_array() メソッドは、結果セット内のレコードを配列に入れて返します。最後に、free() メソッドを使用して結果セット内のメモリを解放し、close() メソッドを使用してデータベース接続を閉じます。上記のコードの出力を図 23-24 に示します。
図 23-24 query() メソッドを使用したクエリ結果
レコードの削除 (delete)、レコードの保存 (insert)、およびレコードの変更 (update) の操作も、query() メソッドを使用して実行されます。レコード削除の例:
コード 23-29 CD コード 第 23 章 23.5querydelete.php
$mysqli=new mysqli("localhost","root","root","sunyang") / / インスタンス化された mysqli
$ Query = "従業員 Emp_id = 2 から削除"; $ Result = $MySQLI-> cho "削除操作成功";
echo "删除操作执行失败";
$mysqli->close();
レコードの保存 (挿入) およびレコードの変更 (更新) の操作は、レコードの削除 (削除) の操作に似ています。それに応じて SQL ステートメントを変更するだけです。
4 プリペアド ステートメント
プリペアド ステートメントを使用すると、再利用されたステートメントのパフォーマンスが向上します。PHP では、prepare() メソッドを使用してプリペアド ステートメントをクエリし、execute() メソッドを使用してプリペアド ステートメントを実行します。 PHP には 2 種類のプリペアド ステートメントがあります。1 つは結果をバインドするもの、もう 1 つはパラメータをバインドするものです。
1.バインディング結果
いわゆるバインディング結果は、PHP スクリプトのカスタム変数を結果セットの対応するフィールドにバインドします。これらの変数は、クエリされたレコードを表します。 バインディング結果のサンプル コードは次のとおりです。 23 -30 CD コード 第 23 章 23.5bandResult.php
$mysqli=new mysqli("localhost","root","root","sunyang"); //mysqli をインスタンス化します
$ query ="select * from 従業員
$result=$mysqli->prepare($query); //準備されたステートメントを実行します
$result->bind_result($id,$number,$name,$age) ;echo $name;
$result->close(); //準備されたステートメントを閉じます
$mysqli->close(); 結果を決定するとき、スクリプト内の変数は、結果セット内のフィールドと 1 対 1 に対応する必要があります。バインド後、 fetch() メソッドを使用して、結果セットにバインドされた変数を 1 つずつフェッチし、最後に準備されたステートメントをスクリプトに接続します。データベースをそれぞれ閉じます。
2.バインドパラメータ
いわゆるバインドパラメータは、PHP スクリプトのカスタム変数を SQL ステートメントのパラメータにバインドします (パラメータは「?」で置き換えられます)。バインドパラメータは、bind_param() メソッドを使用します。このメソッドの形式は次のとおりです:
bool binding_param ( string $types ,mixed &$var1 [,mixed &$... ] )
上記の構文に含まれるパラメータは次のように説明されます。
l タイプ: 表 23-1 に示すように、バインドされた変数のデータタイプは 4 つの文字タイプを受け入れます。
表 23-1 文字の説明
文字タイプ
表現されるデータタイプ
integer
| ダブル |
文字列 | |
ブロブ | |