什么时候在prestashop 1.6.1.3版本中关闭数据库连接?

时间:2016-11-07 05:48:36

标签: mysql prestashop prestashop-1.6 prestashop-1.7

在$ 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'].'&nbsp;Updated'.'<br>';
        }
    }
    else {
        echo $row['ticket_no'].'No'.'<br>';
    }
    $i++;

}

所以我需要在上面的代码中的任何地方关闭数据库连接,或者PrestaShop会处理自己吗? 因为服务器管理员说我们的代码打开了太多的数据库会话, 另外,无论如何都要检查过多的数据库会话是打开/活动的?

1 个答案:

答案 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();
    }
}