0

ハンドラーを に設定して PDO SQL 接続を閉じることができることはわかっていますNULL

しかし、そうしないと、PHP はスクリプトの最後で接続を閉じますか?

たとえば、使用できますか

$db = new PDO('sqlite:db.sqlite');
/* Code */
if ($cond1) { exit; }
/* More code */
if ($cond2) { exit; }
/* ... */
$db = NULL;
/* Code not related to the database */

...またはこれを使用する必要があります:

$db = new PDO('sqlite:db.sqlite');
/* Code */
if ($cond1) {
    $db = NULL;
    exit;
}
/* More code */
if ($cond2) {
    $db = NULL;
    exit;
}
/* ... */
$db = NULL;
/* Code not related to the database */
4

3 に答える 3

3

ドキュメントによると:

接続は、その PDO オブジェクトの存続期間中アクティブなままです。接続を閉じるには、オブジェクトへの残りのすべての参照が削除されることを確認して、オブジェクトを破棄する必要があります。これは、オブジェクトを保持する変数に NULL を割り当てることによって行います。これを明示的に行わないと、スクリプトが終了したときに PHP が自動的に接続を閉じます

于 2013-03-12T18:43:12.250 に答える
1

例。

これはあなたのdbcクラスです

<?php

class dbc {

    public $dbserver = 'server';
    public $dbusername = 'user';
    public $dbpassword = 'pass';
    public $dbname = 'db';

    function openDb() {    
        try {
            $db = new PDO('mysql:host=' . $this->dbserver . ';dbname=' . $this->dbname . ';charset=utf8', '' . $this->dbusername . '', '' . $this->dbpassword . '');
        } catch (PDOException $e) {
            die("error, please try again");
        }        
        return $db;
    }

    function getAllData($qty) {
        //prepared query to prevent SQL injections
        $query = "select * from TABLE where qty = ?";
        $stmt = $this->openDb()->prepare($query);
        $stmt->bindValue(1, $qty, PDO::PARAM_INT);
        $stmt->execute();
        $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
        return $rows;
    }    
?>

あなたのPHPページ:

<?php 
require "dbc.php";

$getList = $db->getAllData(25);

foreach ($getList as $key=> $row) {
         echo $row['columnName'] .' key: '. $key;
    }

結果が返されるとすぐに接続が閉じられます

于 2013-03-12T18:47:19.707 に答える
1

ドキュメントによると、exit を呼び出すとき:

スクリプトの実行を終了します。exit が呼び出された場合でも、シャットダウン関数とオブジェクト デストラクタは常に実行されます。

これは、PDO 接続が閉じられることを意味します。ただし、自分で閉じることは常に良い習慣です。

于 2013-03-12T18:48:15.053 に答える