ホームページ >バックエンド開発 >PHPチュートリアル >mysql_connect と mysql_pconnect_PHP チュートリアルの違いの詳細な説明

mysql_connect と mysql_pconnect_PHP チュートリアルの違いの詳細な説明

WBOY
WBOYオリジナル
2016-07-13 17:06:301515ブラウズ

mysql では、一般的に使用される 2 つのデータベース接続モードがあることがわかります。1 つは長期接続で、もう 1 つはページにアクセスした後に切断される接続です。mysql_connect と mysql_pconnect の違いをそれぞれ紹介します。さらに詳しく知りたい場合は、友達が参照してください。

PHP mysql_pconnect

mysql_pconnect() 関数は、MySQL サーバーへの永続的な接続を開きます。

mysql_pconnect() と mysql_connect() は非常に似ていますが、主に 2 つの違いがあります:

1. 接続するとき、この関数はまず、同じホスト上で同じユーザー名とパスワードで開かれている (永続的な) 接続を検索します。見つかった場合は、新しい接続を開かずにこの接続 ID を返します。
2. 次に、スクリプトの実行時に SQL サーバーへの接続は閉じられず、将来の使用に備えて接続は開いたままになります (mysql_close() は、mysql_pconnect() によって確立された接続を閉じません)。
文法
mysql_pconnect(server,user,pwd,clientflag) パラメーターの説明
サーバーはオプションです。接続するサーバーを指定します。

「hostname:port」などのポート番号、またはローカルホストの「:/path/to/socket」などのローカルソケットへのパスを含めることができます。

PHP ディレクティブ mysql.default_host が定義されていない場合 (デフォルトの場合)、デフォルト値は「localhost:3306」です。

ユーザーは任意です。ユーザー名。デフォルト値は、サーバープロセス所有者のユーザー名です。
pwd オプション。パスワード。デフォルト値は空のパスワードです。
clientflag オプション。 client_flags パラメータには、次の定数を組み合わせることができます:

•MYSQL_CLIENT_SSL - SSL暗号化を使用します
•MYSQL_CLIENT_COMPRESS - 圧縮プロトコルを使用します
•MYSQL_CLIENT_IGNORE_SPACE - 関数名の後にスペースを許可します
•MYSQL_CLIENT_INTERACTIVE - 接続を閉じるまでのインタラクションタイムアウトの非アクティブ時間を許可します

戻り値
成功した場合は MySQL 永続接続識別子を返し、エラーの場合は FALSE を返します。
ヒントと注意事項
注: オプションの clientflag パラメータは、PHP バージョン 4.3.0 以降で使用できます。

ヒント: 非永続的な接続を作成するには、mysql_connect() 関数を使用します。

コードは次のとおりです コードをコピー
$con = mysql_pconnect("localhost","mysql_user","mysql_pwd");
if (!$con)
{
die('接続できませんでした: ' .mysql_error());
}
?>


PHP mysql_connect


mysql_connect() 関数は、非永続的な MySQL 接続を開きます。

文法
mysql_connect(server,user,pwd,newlink,clientflag) パラメーターの説明
サーバーはオプションです。接続するサーバーを指定します。

「hostname:port」などのポート番号、またはローカルホストの「:/path/to/socket」などのローカルソケットへのパスを含めることができます。

PHP ディレクティブ mysql.default_host が定義されていない場合 (デフォルトの場合)、デフォルト値は「localhost:3306」です。

ユーザーは任意です。ユーザー名。デフォルト値は、サーバープロセス所有者のユーザー名です。
pwd オプション。パスワード。デフォルト値は空のパスワードです。
新しいリンクはオプションです。 mysql_connect() が同じパラメータで 2 回目に呼び出された場合、新しい接続は確立されませんが、すでに開いている接続の ID が返されます。 new_link パラメータはこの動作を変更し、mysql_connect() が同じパラメータで以前に呼び出された場合でも、mysql_connect() が常に新しい接続を開くようにします。
clientflag オプション。 client_flags パラメータには、次の定数を組み合わせることができます:

•MYSQL_CLIENT_SSL - SSL暗号化を使用します
•MYSQL_CLIENT_COMPRESS - 圧縮プロトコルを使用します
•MYSQL_CLIENT_IGNORE_SPACE - 関数名の後にスペースを許可します
•MYSQL_CLIENT_INTERACTIVE - 接続を閉じるまでのインタラクションタイムアウトの非アクティブ時間を許可します

戻り値
成功した場合は MySQL 接続 ID を返し、失敗した場合は FALSE を返します。
ヒントとメモ
注: mysql_close() を呼び出して事前に明示的に閉じていない限り、スクリプトが終了するとすぐにサーバーへの接続が閉じられます。

ヒント: 永続的な接続を作成するには、mysql_pconnect() 関数を使用します。

コードは次のとおりです コードをコピー

$con = mysql_connect("localhost","mysql_user","mysql_pwd");
if (!$con)
{
die('接続できませんでした: ' .mysql_error());
}

// いくつかのコード...

mysql_close($con);
?>

mysql_connect と mysql_pconnect の違い

これら 2 つの関数の使い方はほぼ同じです。インターネット上では、pconnect を使用するべきだと言う人もいますが、pconnect は良いツールであると考えており、pconnect の使用を断固として拒否している人もいます。ポジション。では、この装備はどのようなものなのでしょうか?
永久リンクは、サーバーが接続を開いて全員がリンクを共有することを意味するものではありません。永続的な接続では、クライアントごとに接続が開かれます。200 人が訪問した場合、200 の接続が存在します。実際、mysql_pconnect() 自体は多くの処理を行いません。唯一行うことは、PHP の実行が停止した後に mysql 接続を自動的に閉じないことです。 PHP が cgi モードで実行される場合、基本的に pconnect と connect に違いはありません。cgi モードでは、各 PHP がプロセスにアクセスし、アクセスが完了すると、PHP の起動時にすべてのデータが解放されます。 Apache モジュールが実行されている場合、Apache にはアプリケーション プロセス プールがあるため、httpd プロセスは完了後にプロセス プールに戻されます。これにより、pconnect で開かれた mysql 接続データが解放されなくなります。これにより、Apache への同時アクセス量が多くない場合、pconnect を使用することで DB に繰り返し接続する時間が節約され、アクセス速度が向上します。これは理解しやすいと思いますが、Apache の場合、同時アクセス数が多い場合、pconnect を使用すると、以前の httpd プロセスによって占有されていた mysql 接続が閉じられないため、mysql が最大接続数に達した可能性があります。 mysql の最大接続数が 500 に設定され、Apache の最大同時アクセス数が 2000 に設定されている場合、後続の一部のリクエストは決して満たされないことになります。すべてのアクセスがデータベースへのアクセスを要求すると仮定します。現在の 500 リクエストに対する httpd リクエストは停止せず、mysql 接続の最大数に達した場合のみ、mysql に接続できません。現在の 500 の httpd プロセスが停止または再利用されていますが、mysql に接続できますか?
データベース操作が複雑で時間がかかる場合、httpd は多くの同時プロセスをフォークし、最初に発生した httpd プロセスがデータベース接続を解放しないため、後から発生した httpd プロセスはデータベースに接続できなくなります。他の httpd プロセスを再利用しない MySQL 接続プロセス。その結果、多くの接続タイムアウトが発生します。 同時アクセス量が多くない場合、pconnect を使用するとアクセス速度を簡単に向上させることができますが、同時アクセス量が増加した後、再度 pconnect を使用するかどうかは開発者の選択によって異なります。
私の個人的な意見では、PHP の現在の MySQL への接続は実際には接続プールを使用していないため、Apache のプロセス プールを借用しているだけなので、同時アクセス数が多い場合には pconnect はうまく機能しません。効率性
実際のアプリケーションでは、mysql_pconnect を使用すると、新しいページの各更新とリクエストが高速になりますが、mysql_connect を使用すると、データベース接続が比較的遅い場合に、更新するたびに再リクエストする必要があることがわかります。違い。 。データベース接続が比較的遅く、DB 操作がそれほど複雑ではなく、プログラムがロックが発生しないと十分に確信している場合、またはサーバーを制御でき、上記 2 つの条件のいずれかを満たしている場合は、使用できます。接続します。
pconnect をスクリプトで閉じる必要はありません。mysql で有効期間を設定することも、定期的にスキャンして長期間休止していた接続を強制終了するシェルを作成することもできます。 一文要約: pconnect を使いこなすには、PHP スクリプトだけでなく、データベースやサーバーの設定も関係します。

http://www.bkjia.com/PHPjc/630712.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/630712.html技術記事 mysql では、一般的に使用される 2 つのデータベース接続モードがあることがわかります。1 つは長期接続で、もう 1 つはページにアクセスした後に切断される接続です。mysql_connect と...
を紹介します。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。