ホームページ >バックエンド開発 >PHPの問題 >PHPでPDOとの接続を閉じる方法

PHPでPDOとの接続を閉じる方法

醉折花枝作酒筹
醉折花枝作酒筹転載
2021-06-21 15:09:313013ブラウズ

この記事では、PHP で PDO との接続を閉じる方法を紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

PHPでPDOとの接続を閉じる方法

以前 mysql 接続操作を手動で作成したときは、通常、mysql_close() を使用してデータベース接続を閉じました。ただし、最新の開発では、フレームワークの一般的な使用により、基礎となるカプセル化が無視され、ほとんどのフレームワークはデフォルトでデータベース操作に PDO を使用するようになりました。

公式説明

接続を閉じるには、オブジェクトを破棄して、そのオブジェクトへの残りの参照がすべて削除されるようにする必要があります。オブジェクト変数。これを明示的に行わないと、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 がデータベース接続を閉じることができることさえ知りません。フレームワークは私たちに利便性をもたらしますが、多くの事柄を非常にうまくカプセル化しているため、多くの友人はその基礎となる内容を気にしません。しかし、より高いレベルに移行すると、これらの基礎となる事柄が邪魔になることがよくあります。

テスト コード:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202008/source/PHP%E4%B8%ADPDO%E5%85%B3%E9%97%AD%E8%BF%9E%E6%8E%A5%E7%9A%84%E9%97%AE%E9%A2%98.php

推奨学習: php ビデオ チュートリアル

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

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