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 ,也将始终执行关闭函数和对象析构函数。

这意味着您的 PDO 连接将被关闭。不过,自己关闭它总是一个好习惯。

于 2013-03-12T18:48:15.053 回答