web-dev-qa-db-ja.com

PHPで使用した後、データベース接続を閉じる必要がありますか?

PHPスクリプト内の不要なデータベース接続をすべて閉じる必要があるのでしょうか。

ブロックの実行が停止するとデータベース接続が暗黙的に閉じられ、接続を「手動で」閉じるとコードベースが不要なコードで膨らむ可能性があることを知っています。

しかし、実行時にコードを可能な限り読みやすく、簡単に理解できるようにし、同時にいくつかの起こり得る問題を防ぐために、そうするべきではありませんか?

また、データベースオブジェクトをunset()するだけで十分でしょうか。

3
Wottensprels

安全なコーディングのために、常にデータベース接続を明示的に閉じて、コードが正常に閉じることができることを確認し、コードの使用後に他のオブジェクトが同じ接続を再利用しないようにする必要があります。

Unsetを使用することは、データベース接続を開いたままにすることと同じです。変数の後に接続を正常に閉じるように接続を要求するのではなく、ガベージコレクターが変数の後にクリーンアップを行うためです。以下のCodeCasterで述べられているように、ガベージコレクタは接続が確実に閉じられるため、そうすることは許容されます。

有用な例として、どこかのカフェテリアで昼食を食べているとしましょう。食べた後、2つの選択肢があります。残り物をゴミ箱に捨て、プレート/トレイを正しい場所に戻します(自分で掃除する)。そしてもう1つは、混乱をテーブルに残し、他の誰か(ガベージコレクター)がクリーンアップするのを待ちます。

あなたがそれを自分で片付ければ、あなたの混乱はきっと片付けられるでしょう。しかし、ガベージコレクターがごみをきれいにする直前にガベージコレクターに依存している場合、奇妙なストーカーが使用済みの道具を使用してあなたに関する毎晩の空想の中でそれらを支援することを決定した場合、ちょうど間に合うようにそれらをカフェテリアに戻すガベージコレクターがごちゃごちゃを片付けます。そのようなことが起こる可能性があります。

編集:ガベージコレクターに関する私の間違いを修正しました。

6
Maru

はい、もちろん役立ちます。クライアントがテーブルに対して通常の操作を行うアプリケーションを構築しているとします。現在、アプリケーションが重く、処理が本質的である場合、膨大な数の接続が開いているとアプリケーションが遅くなり、非常に長い間アイドル状態のままになる可能性があります。クライアントがなんらかのアクションを実行している間、接続が開いていることを明示的に確認すると、処理能力が向上する場合があります。その上、助けを待つよりも、混乱をすばやく片付ける方が良いです!

0
user2179697