PDOclosures连接

关于PDO与MySQLi相比,只是一个相当简单的问题。

使用MySQLi,可以closures连接:

$this->connection->close(); 

但是,对于PDO,它声明您使用以下方式打开连接:

 $this->connection = new PDO(); 

但要closures连接,请将其设置为null

 $this->connection = null; 

这是正确的,这将实际上释放PDO连接? (我知道它是因为它被设置为null 。我的意思是MySQLi你必须调用一个函数( close )来closures连接。 PDO就像= null一样容易断开? 还是有一个closures连接的function?

根据文件,你是正确的( http://php.net/manual/en/pdo.connections.php ):

该连接在该PDO对象的生命周期中保持活动状态 。 要closures连接,您需要通过确保所有剩余的引用被删除来销毁对象 – 您可以通过将NULL分配给保存该对象的variables来执行此操作。 如果你没有明确地做到这一点, PHP将在脚本结束时自动closures连接

请注意,如果您将PDO对象初始化为持久连接,它将不会自动closures连接。

 $conn=new PDO("mysql:host=$host;dbname=$dbname",$user,$pass); // If this is your connection then you have to assign null // to your connection variable as follows: $conn=null; // By this way you can close connection in PDO. 

我创build了一个派生类,使其具有更多的自logging指令,而不是“$ conn = null;”。

 class CMyPDO extends PDO { public function __construct($dsn, $username = null, $password = null, array $options = null) { parent::__construct($dsn, $username, $password, $options); } static function getNewConnection() { $conn=null; try { $conn = new CMyPDO("mysql:host=$host;dbname=$dbname",$user,$pass); } catch (PDOException $exc) { echo $exc->getMessage(); } return $conn; } static function closeConnection(&$conn) { $conn=null; } } 

所以我可以调用我的代码之间:

 $conn=CMyPDO::getNewConnection(); // my code CMyPDO::closeConnection($conn);