$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'].' Updated'.'<br>';
}
}
else {
echo $row['ticket_no'].'No'.'<br>';
}
$i++;
}
では、上記のコードのどこかでデータベース接続を閉じる必要がありますか?
サーバー管理者は、私たちのコードによって開かれているデータベース セッションが多すぎると言っているため、常にあまりにも多くのデータベース セッションが開いている/アクティブである場所をチェックする方法はありますか?