1

$db = Db::getInstance(); によって db インスタンスが作成された後、prestashop 1.6.1.3 でデータベース接続が閉じられるのはいつですか?

コード db close 関数を記述してデータベース接続を手動で閉じる必要はありますか? または、prestashop の db クラスがこれを処理しますか? 実際、$db = Db::getInstance(); によって db オブジェクトが作成された後、PrestaShop db 接続が閉じられるのはいつですか?

以下のコードは、prestashop のルート ディレクトリにある単純な php ファイルで、テーブルの 1 つを更新します。このページは、cron ジョブ タスクによって 1 分ごとに呼び出されます。ここでは、どこにも接続を閉じていません。閉じる必要がありますか?

$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++;

}

では、上記のコードのどこかでデータベース接続を閉じる必要がありますか?
サーバー管理者は、私たちのコードによって開かれているデータベース セッションが多すぎると言っているため、常にあまりにも多くのデータベース セッションが開いている/アクティブである場所をチェックする方法はありますか?

4

1 に答える 1