PHPでは、Webアプリケーションを開発する際にMySQLデータベースに接続することは一般的なタスクです。さまざまな方法でデータベース接続を作成できます。これは、 mysql_connect()関数を使用して永続的な接続を実装するための典型的な方法です。この記事では、MySQL_Connect()関数を介してデータベースの永続的な接続を実装する方法と、その動作原則と実用的なアプリケーションを詳細に分析します。
永続的な接続とは、接続が確立されると、スクリプトが実行された後は閉じられないが、次のスクリプトリクエストを待つときに接続されたままで再利用されることを意味します。この方法では、接続を頻繁に確立および閉鎖するオーバーヘッドを減らすことができ、より多くのリクエストを伴うアプリケーションシナリオに特に適しています。対照的に、通常の接続は、スクリプトが実行されるたびに新しいデータベース接続を確立し、実行後に閉じることです。
PHPでは、 mysql_connect()関数を使用して永続的な接続を確立できます。基本的な構文は次のとおりです。
<span><span><span class="hljs-title function_ invoke__">mysql_connect</span></span><span>(</span><span><span class="hljs-string">'hostname'</span></span><span>, </span><span><span class="hljs-string">'username'</span></span><span>, </span><span><span class="hljs-string">'password'</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);
</span></span>'hostname' :データベースサーバーのホストアドレス、通常はローカルホストまたはIPアドレス。
「ユーザー名」 :データベースに接続するために使用されるユーザー名。
「パスワード」 :ユーザー名に対応するパスワード。
4番目のパラメーターTrueは、永続的な接続を確立することを意味します。
接続クロージングメカニズム:
通常の接続:スクリプトが実行されるたびに、接続が閉じられます。
永続的な接続:たとえスクリプトが実行されていても、その後のリクエストが再利用されるために接続がアクティブなままです。
パフォーマンスの違い:
永続的な接続は、特に長期にわたるWebアプリケーションまたは非常に同時アプリケーションのために、パフォーマンスを向上させるために、データベース接続の確立と破壊のオーバーヘッドを減らします。
通常の接続では、通常の接続が要求されるたびに新しい接続を作成する必要があります。これにより、高い並行性環境でパフォーマンスボトルネックにつながる可能性があります。
持続的な接続の最大の利点:
効率:データベース接続の重複の確立を削減します。
リソースの保存:接続プールは、特定の期間にわたって確立された接続を再利用します。
まず、MySQL構成ファイルで永続的な接続機能が有効になっていることを確認する必要があります。次の構成は、MySQLの構成ファイル( my.cnfまたはmy.ini )で確認できます。
<span><span><span class="hljs-section">[mysqld]</span></span><span>
skip-name-resolve
</span><span><span class="hljs-attr">wait_timeout</span></span><span> = </span><span><span class="hljs-number">28800</span></span><span>
</span><span><span class="hljs-attr">interactive_timeout</span></span><span> = </span><span><span class="hljs-number">28800</span></span><span>
</span></span>Skip-name-resolve :DNS逆解像度を無効にして、接続するたびにDNSクエリを回避します。
wait_timeoutおよびinteractive_timeout :接続のタイムアウト時間を設定して、接続が早すぎないことを確認します。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 使用mysql_connect永続的な接続を確立します</span></span><span>
</span><span><span class="hljs-variable">$link</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_connect</span></span><span>(</span><span><span class="hljs-string">'localhost'</span></span><span>, </span><span><span class="hljs-string">'root'</span></span><span>, </span><span><span class="hljs-string">'password'</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$link</span></span><span>) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">'Could not connect: '</span></span><span> . </span><span><span class="hljs-title function_ invoke__">mysql_error</span></span><span>());
}
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'Connected successfully!'</span></span><span>;
</span><span><span class="hljs-comment">// その他のデータベース操作...</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>このコードでは、 mysql_connect()の4番目のパラメーターがtrueに設定されており、永続的な接続が必要であることを示します。接続が成功した後、データベース操作は引き続き実行されます。
永続的な接続が確立されると、通常のデータベース操作を実行できます。たとえば、データベースを選択してクエリを実行します。
<span><span><span class="hljs-title function_ invoke__">mysql_select_db</span></span><span>(</span><span><span class="hljs-string">'my_database'</span></span><span>, </span><span><span class="hljs-variable">$link</span></span><span>);
</span><span><span class="hljs-comment">// 埋め込むSQLクエリ</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_query</span></span><span>(</span><span><span class="hljs-string">'SELECT * FROM users'</span></span><span>, </span><span><span class="hljs-variable">$link</span></span><span>);
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_fetch_assoc</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'username'</span></span><span>] . </span><span><span class="hljs-string">'<br>'</span></span><span>;
}
</span></span>持続的な接続の場合、通常、接続を手動で閉じる必要はありません。これは、アクティブで再利用されたままであるためです。ただし、特別なニーズがある場合は、明示的な閉鎖のためにmysql_close()に電話することもできます。
<span><span><span class="hljs-title function_ invoke__">mysql_close</span></span><span>(</span><span><span class="hljs-variable">$link</span></span><span>);
</span></span>接続プーリング制限:
永続的な接続を使用すると、MySQLデータベースの接続プールには最大の接続制限がある場合があります。データベース接続が多すぎると、接続プールが使い果たされる場合があります。
セッションステータスの問題:
永続的な接続により、設定された変数など、最後の接続のセッションステータスが保存されます。複数のスクリプトが異なるセッション設定に依存する場合、競合が発生する場合があります。
リソース職業:
永続的な接続はパフォーマンスを改善できますが、多数の接続が閉じられていないかのように、それらは慎重に使用する必要もありますが、MySQL Serverリソースが使い果たされる可能性があります。
セキュリティの問題:
永続的な接続を使用する場合、データベース接続には長いライフサイクルがあります。永続的な接続の悪用から悪意のあるユーザーを避けるために、接続情報(ユーザー名やパスワードなど)がリークされていないことを確認してください。
MySQL_Connect()関数を介して実装された永続的な接続は、データベース接続を頻繁に確立および破壊するオーバーヘッドを効果的に減らすことができ、特に並行性が高く、データベースに頻繁にアクセスできるアプリケーションシナリオに適しています。ただし、永続的な接続を使用する場合、データベース接続プールの接続の最大数が実際のニーズを満たすことができるように、リソース管理、セッションの競合、その他の問題にも注意を払う必要があります。一般に、合理的な構成と永続的な接続の使用は、PHPデータベースアプリケーションのパフォーマンスを改善するための効果的な手段です。