2016-11-06 4 views
2

Я вызываю Db :: getInstance() -> execute() для вставки и обновления и для запроса выбора Db :: getInstance() -> executeS() После этого сделайте нам нужно закрыть соединение базы данных, или сам prestashop закрывает/обрабатывает соединение с базой данных.Мне нужно закрыть сеанс db в prestashop

Как мы будем проверять, долгое время открыта для нашей базы данных в prestahsop? Наш администратор сервера говорит, что наши сеансы базы данных увеличиваются, поскольку мы не закрываем соединение.

Любой эксперт prestahsop вы можете объяснить, как PrestaShop закрывает соединение или нам нужно закрыть его вручную?

Db::getInstance()->execute() 

Для некоторых cronjob файлов, которые мы создали, что мы делаем, мы включаем конфигурационный файл, как показано ниже: требуют «конфигурации/config.inc.php»;

$db = Db::getInstance(); 
    $result = $db->executeS($get_promotions_sql, false); 
    while ($row = $db->nextRow($result)) { 
     $id_product=$row['id_product']; 
     $name="<br>".$row['name']; 
     } 

делает это подключение к моей базе данных открытым навсегда? или он будет закрыт/или обрабатывать с помощью функции GetInstance в PrestaShop

ответ

1

Глядя на Db класса ...

/** 
* Close connection to database 
*/ 
public function __destruct() 
{ 
    if ($this->link) 
     $this->disconnect(); 
} 

Подключение к базе данных будет закрыт, когда вызывается деструктор.

Can I trust PHP __destruct() method to be called?

Соединение устанавливается, когда вызывается конструктор. Нет, вам не нужно вручную открывать/закрывать подключение к базе данных.

+0

Что Ает ДБ сессий? Как я могу проверить, почему она растет из моего кода? В моих внешних страницах, которая не содержит какой-либо класса, я просто добавить заголовок и вызов дб экземпляра здесь мне нужно вызвать деструктор? вот мой код http://pastie.org/10956905 –

+0

@JerryAbraham Как поясняется в ответной ссылке, деструктор будет вызван, когда ссылки на объект больше не будут существовать или выполнение сценария заканчивается.Вот еще [ссылка] (http://stackoverflow.com/questions/2385047/when-will-destruct-not-be-called-in-php), которая объясняет, почему деструктор не будет вызван. – TheDrot

3

Вы не должны закрывать соединение с БД, PrestaShop будет обрабатывать это автоматически. Вы также можете отключить соединение вручную, вызвав следующий код:

Db::getInstance()->disconnect(); 

Если у вас возникли проблемы с производительностью на вашем магазине, то вы можете включить PrestaShop код Profiler и увидеть, что экземпляры объектов используют память сервера.

Для того чтобы PrestaShop код Profiler, необходимо выполнить следующие шаги:

  • На сервере, отредактируйте файл /config/defines.inc.php.

  • Найдите эту линию (вокруг строки 43): define ('_ PS_DEBUG_PROFILING_',
    false);

  • В этой строке измените значение «false» на «true».

  • Сохраните изменения.

+0

'disconnect()' не является статическим методом, но может быть вызван с помощью 'Db :: getInstance() -> disconnect()'. – TheDrot

+0

Благодарим вас за исправление :) – Wolfack

Смежные вопросы