ホームページ  >  記事  >  バックエンド開発  >  mysql - PHP でデータベースに接続して解放する最良の方法は何ですか?

mysql - PHP でデータベースに接続して解放する最良の方法は何ですか?

WBOY
WBOYオリジナル
2016-08-04 09:20:141500ブラウズ

マニュアルでは、各クエリが完了すると接続が閉じられます。データベース操作が複数ある場合、コネクションの生成と解放が頻繁に発生するのは不合理ではないでしょうか?

たとえば、20 個の関数を含む a.php があり、それぞれが 20 個のオブジェクトをインスタンス化する必要があり、各オブジェクトにはデータベース操作があります。

したがって、3 つの方法があります:
1. 20 個のオブジェクトの各クラスでデータベース接続を取得し、操作が完了して閉じられます。
2. a.phpでデータベース接続を取得し、各関数で接続パラメータを渡し、最後にa.phpで解放します。
3. 静的データベース接続オブジェクトを生成し、各クラスで ConnectionClass::db を呼び出します

何が良いか、議論してください。

.

返信内容:

マニュアルでは、各クエリが完了すると接続が閉じられます。データベース操作が複数ある場合、コネクションの生成と解放が頻繁に発生するのは不合理ではないでしょうか?

たとえば、20 個の関数を含む a.php があり、それぞれが 20 個のオブジェクトをインスタンス化する必要があり、各オブジェクトにはデータベース操作があります。

したがって、3 つの方法があります:
1. 20 個のオブジェクトの各クラスでデータベース接続を取得し、操作が完了して閉じられます。
2. a.phpでデータベース接続を取得し、各関数で接続パラメータを渡し、最後にa.phpで解放します。
3. 静的データベース接続オブジェクトを生成し、各クラスで ConnectionClass::db を呼び出します

何が良いか、議論してください。

.

静的変数を使用してデータベース接続を保存すると、複数の関数が 1 つのリクエストで 1 回だけデータベースに接続できます。
永続的な接続が有効になっている場合、PHP-FPM プロセスは複数のリクエストでデータベース接続を共有できます。 リーリー
@impig33 次の 2 つの関数呼び出しは同じ結果を返します。$db に初めて値が割り当てられた後、else の分岐は 2 回目は実行されず、uniqid 番号は生成されないことがわかります。 mysql - PHP でデータベースに接続して解放する最良の方法は何ですか? リーリー

他のデータベースについてはわかりませんが、MySQL は永続的な接続をサポートしています。

継続的な接続では、以前のデータベース接続は閉じられず、次回接続するときに以前の接続が直接使用されます。


MySQLi

:

MySQL に似たものはありません PHP 公式 Web サイト「mysqli 拡張機能と永続的接続」を参照してください。修正してくれた @eechen に感謝します。 pconnect()函数,但你可以连接时在主机名前增加p:mysql 拡張機能とは異なり、mysqli は永続的な接続を開くための特別なメソッドを提供しません。永続的な接続を開く必要がある場合は、接続時にホスト名の前に p: を追加する必要があります。

PDO は長い接続もサポートしています: 新しい PDO の 4 番目のパラメーターで

) を使用します。PHP 公式マニュアル - PDO 接続と接続管理 Example4 を参照してください。

array(PDO::ATTR_PERSISTENT3. これについて議論する必要はありません。通常、DB オブジェクトはシングルトン モードを採用しますが、これはすでにコンセンサスとなっています。

個人的には2がベストだと思います。

接続プールの使用を検討することもできます

https://www.baidu.com/s?wd=ph...


3 もシングルトンモードをサポートしていると思います

この回答の書き方がわかりません。

たくさんのもの: オブジェクト、デストラクター、シングルトン、依存性注入、永続的接続

最後に、これは難しくないことに突然気づき、halcon などのフレームワークを見つけて分析しました。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。