2013-03-12 49 views
0

我知道我可以關閉PDO SQL連接,將處理程序設置爲NULL如果我沒有明確地關閉它,PHP會在腳本的末尾關閉與PDO打開的SQL連接嗎?

但是,如果我不這樣做,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 */ 
+0

是的,運行1000次並觀察內存使用情況來驗證。 – mkaatman 2013-03-12 18:42:34

+1

是的,但明確關閉它是一個好習慣 – DonCallisto 2013-03-12 18:44:50

回答

3

按照docs

連接保持活躍爲該PDO對象的生命週期。若要關閉連接,您需要通過確保 所有剩餘的引用都被刪除來銷燬該對象 - 您可以通過將 NULL分配給保存該對象的變量來執行此操作。如果你不明確這樣做 ,當你的 腳本結束時,PHP將自動關閉連接。

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; 
    } 

你的連接將盡快將結果返回

1

封閉按照docs當你致電出口:

終止腳本的執行。即使退出被調用,關閉函數和對象析構函數也會一直執行。

這意味着您的PDO連接將被關閉。儘管如此,自己關閉它總是很好的做法。