如果我没有明确关闭它,PHP是否会在脚本末尾用PDO打开SQL连接?

时间:2013-03-12 18:41:14

标签: php sql pdo connection database-connection

我知道我可以关闭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 */

3 个答案:

答案 0 :(得分:3)

根据 docs

  

该连接在该PDO对象的生命周期内保持活动状态。至   关闭连接,你需要通过确保来破坏对象   所有剩余的引用都将被删除 - 您可以通过分配来完成此操作   对包含该对象的变量为NULL。如果你不这样做   明确地, PHP会在你的时候自动关闭连接   脚本结束

答案 1 :(得分: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;
    }

结果返回后,您的连接将立即关闭

答案 2 :(得分:1)

根据docs当您致电退出时:

  

终止脚本的执行。即使调用exit,也将始终执行关闭函数和对象析构函数。

这意味着您的PDO连接将被关闭。尽管如此,自己关闭它总是很好的做法。