在1.6.1.3版本中使用$db = db::getInstance();
创建数据库实例后,何时关闭数据库连接?我需要手动关闭数据库连接编写任何代码db关闭函数?或者prestshop中的db类会处理这个?实际上,当PrestaShop数据库连接将被关闭后,一个db对象是由$db = db::getInstance();?
看下面的代码,这是一个简单的php文件在我的prestshop的根目录更新我的一个表,这个页面每一分钟被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将处理自己的任何地方?
因为服务器管理员说我们的代码打开了太多的数据库会话,也有无论如何检查从哪里太多的数据库会话总是打开/活动?
据我所知,我从未在prestshop中关闭过DB连接。
该文档也没有明确说明关闭每个DB请求。查看源代码,他们也不会在DB连接后运行close命令。
查看class db dbmysql .php类,我们可以找到下面的函数。
/**
* Destroys the database connection link.
*
* @see DbCore::disconnect()
*/
public function disconnect()
{
@$this->link->close();
}
然后我们将查看类db db .php,我们发现函数$this->disconnect()
被调用。所以可以肯定地说,它们会自动关闭所有的DB连接。
/**
* Closes connection to database.
*/
public function __destruct()
{
if ($this->link) {
$this->disconnect();
}
}