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