在$ db = Db :: getInstance()创建数据库实例后,在prestashop 1.6.1.3中何时关闭数据库连接;
我是否需要通过编写任何代码db close函数来手动关闭数据库连接? 或者prestashop中的db类会处理这个吗? 实际上,当$ db = Db :: getInstance()创建db对象后,PrestaShop数据库连接何时关闭??
请参阅下面的代码,这是我prestashop根目录下的一个简单的php文件来更新我的一个表,这个页面每隔一分钟由cron作业任务调用,这里我没有关闭任何地方的连接,我们需要关闭它?
$CheckStatusSql = "select * from ticket_status where item_id='$ItemID' and ticket_series='$TicketSeries' and status='BOOKED' ";
$db = Db::getInstance();
$result = $db->executeS($CheckStatusSql, false);
$ChangeStatus ='';
while ($row = $db->nextRow($result)) {
$status = $row['status'];
$booked_on = $row['booked_on'];
$ticket_no = $row['ticket_no'];
$to_time = strtotime(date("Y-m-d H:i:s"));// Time Now
$from_time = strtotime($booked_on); //Booked Time
$time_diff_minutes=round(abs($to_time - $from_time) / 60,2);
if($time_diff_minutes>$checkMinutes){
$ChangeStatus=$ChangeStatus."Booked ticket no: '".$ticket_no."' exceeds 30 Minutes and its now about ".$time_diff_minutes." minutes, status changed to AVAILABLE<br><br\>";
$updateSql = "UPDATE ticket_status SET status = 'AVAILABLE', booked_on = NULL WHERE item_id='$ItemID' and ticket_series='$TicketSeries' and status='BOOKED' and ticket_no='$ticket_no'";
$bookResult = $db->executeS($updateSql, false);
}
}
那就是我只是包含配置文件(需要'config / config.inc.php';)并创建一个db对象然后执行我的查询,如下所示:
require 'config/config.inc.php';
$checkMinutes = 30;// In minutes
$checkTimeInSeconds = $checkMinutes*60;
$sql = 'SELECT * FROM ps_ticket WHERE status=5';
$db = Db::getInstance();
$result = $db->executeS($sql, false);
$i=1;
while ($row = $db->nextRow($result)) {
$time = strtotime($row['hold_on']);
$curtime = time();
if(($curtime-$time) > $checkTimeInSeconds) { ///3600 seconds
$sql = 'UPDATE `'._DB_PREFIX_.'lopp_ticket`
SET
`id_customer` = 0,
`hold_on`=0,
`status` = 1
WHERE `ticket_id` = '.$row['ticket_id'];
if(Db::getInstance()->execute($sql)) {
echo $row['ticket_id'].' Updated'.'<br>';
}
}
else {
echo $row['ticket_no'].'No'.'<br>';
}
$i++;
}
所以我需要在上面的代码中的任何地方关闭数据库连接,或者PrestaShop会处理自己吗? 因为服务器管理员说我们的代码打开了太多的数据库会话, 另外,无论如何都要检查过多的数据库会话是打开/活动的?
答案 0 :(得分:2)
据我所知,我从未在 Prestashop 中关闭过数据库连接。
documentation 也没有明确声明关闭每个数据库请求。 查看那里的源代码,他们也从未在数据库连接后运行关闭命令。
查看 classes\db\DbMySQLi.php 类,我们可以找到下面的函数。
/**
* Destroys the database connection link.
*
* @see DbCore::disconnect()
*/
public function disconnect()
{
@$this->link->close();
}
然后我们将查看 classes\db\Db.php,我们发现函数 $this->disconnect()
被调用。所以可以肯定地说他们会自动关闭所有数据库连接。
/**
* Closes connection to database.
*/
public function __destruct()
{
if ($this->link) {
$this->disconnect();
}
}