ホームページ  >  記事  >  バックエンド開発  >  PHP で PDO を使用して接続を閉じる方法

PHP で PDO を使用して接続を閉じる方法

醉折花枝作酒筹
醉折花枝作酒筹転載
2021-07-05 15:43:351940ブラウズ

現代の開発では、フレームワークを一般的に使用すると、基礎となるカプセル化が無視され、ほとんどのフレームワークはデフォルトでデータベース操作に PDO を使用するようになりました。つまり、PDO がどのようにデータ接続を閉じるかは誰もが知っていますか? ?

PHP で PDO を使用して接続を閉じる方法

#正式な説明

接続を閉じるには、オブジェクトを破棄して、そのオブジェクトへの残りの参照がすべて削除されるようにする必要があります。を使用すると、オブジェクト変数に NULL 値を割り当てることができます。これを明示的に行わないと、PHP はスクリプトの最後で接続を自動的に閉じます。

$pdo = new PDO('mysql:host=127.0.0.1;
port=3306;
dbname=blog_test', 'root', '');
$pdo = null;

公式ドキュメントでは、PDO オブジェクトに NULL を割り当てるだけであることが非常に明確に記載されています。しかし、物事は本当にそんなに単純なのでしょうか?

実際のテスト

このようなテストを行ってみましょう。通常の状況では、データベース接続を開いた後すぐに閉じることはありませんが、いくつかの操作を実行する必要があります。 。

$pdo = new PDO('mysql:host=127.0.0.1;port=3306;dbname=blog_test', 'root', '');
$stmt = $pdo->prepare('SELECT * FROM zyblog_test_user');
$stmt->execute();
$pdo = null;
sleep(60);

上記のコードを実行した後、データベースで show full processlist を使用して接続プロセスを表示すると、現在の接続はすぐには閉じられず、60 秒後まで閉じられないことがわかります。つまり、ページの実行が完了した後です。 $pdo = null; が正常に実行されなかったようです。

実はこの状況は公式文書で説明されていますが、人々は注目しないかもしれません。 [オブジェクトへの残りの参照がすべて削除されるようにするには、オブジェクトを破棄する必要があります。] 上記のコードでは、\$stmt プリコンパイル済み SQL ステートメント関数が $pdo オブジェクト内のメソッドを呼び出し、それらの間に参照依存関係を作成します。この場合、$pdo = null; を直接指定しても効果がないため、$stmt にも null を割り当てる必要があります。

$pdo = new PDO('mysql:host=127.0.0.1;port=3306;dbname=blog_test', 'root', '');

$stmt = $pdo->prepare('SELECT * FROM zyblog_test_user');
$stmt->execute();

$stmt = null;
$pdo = null;
sleep(60);

mysqli test

mysqli のデフォルトの拡張コンポーネントを使用するとき、つまり、mysqli オブジェクトで close() を使用してデータベース接続?または、コードを使用して直接テストします。 (mysql 拡張機能は古いため、推奨されません。データベース操作クラスを自分でカプセル化する場合、または小さなデモを作成する場合は、mysqli を使用することをお勧めします)

$conn = new mysqli('127.0.0.1', 'root', '', 'blog_test');

$result = $conn->query('SELECT * FROM zyblog_test_user');
$stmt = $conn->prepare("SELECT * FROM zyblog_test_user");
$stmt->execute();

$conn->close();

sleep(60);

上記のコードを実行した後、データベース内の接続 プロセスは、まだ実行中の接続を認識しません。つまり、mysqli で close() メソッドを呼び出すと、データベース接続をすぐに直接閉じることができます。

まとめ

実は今日の内容は、データベース接続に関する公式ドキュメントのNoteに記載されていた情報でもあります。あるマスターがこの問題をずっと前に発見して共有しましたが、ほとんどの人はこの問題をまったく知りませんし、PDO がデータベース接続を閉じることができることさえ知りません。

フレームワークは私たちに利便性をもたらしますが、多くの事柄を非常にうまくカプセル化しているため、多くの友人は基礎となるコンテンツの一部を気にしません。しかし、より高いレベルに移行すると、多くの場合、これらの低レベルの事柄があなたの障害になるでしょう。

推奨学習:

php ビデオ チュートリアル

以上がPHP で PDO を使用して接続を閉じる方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はimooc.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。