Я звоню Db :: getInstance () -> execute () для вставки и обновления
и для запроса выбора Db :: getInstance () -> executeS ()
После этого нам нужно закрыть соединение с базой данных или сам prestashop закрывает / обрабатывает соединение с базой данных.
Как мы будем проверять, открыто ли соединение с нашей базой данных в prestahsop в течение длительного времени?
Администратор нашего сервера говорит, что количество сеансов в нашей базе данных увеличивается, поскольку мы не закрываем соединение.
Любой эксперт prestahsop, можете ли вы объяснить, как PrestaShop закрывает соединение, или нам нужно закрыть его вручную?
Db::getInstance()->execute()
Для определенных файлов cronjob, которые мы создали, мы включаем файл конфигурации, как показано ниже:
требуют ‘config / 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
Вы не должны закрывать соединение с БД, PrestaShop будет обрабатывать это автоматически. Вы также можете отключить соединение вручную, вызвав следующий код:
Db::getInstance()->disconnect();
Если у вас есть проблема с производительностью в вашем магазине, вы можете включить PrestaShop Code Profiler и посмотреть, какие экземпляры объектов используют память вашего сервера.
Чтобы включить PrestaShop Code Profiler, вам необходимо выполнить следующие шаги:
На вашем сервере отредактируйте файл /config/defines.inc.php.
Найдите эту строку (около строки 43): определите (‘_ PS_DEBUG_PROFILING_’,
ложный);
В этой строке измените «ложь» на «истина».
Сохраните ваши изменения.
Глядя на Db
учебный класс…
/**
* Close connection to database
*/
public function __destruct()
{
if ($this->link)
$this->disconnect();
}
Соединение с базой данных будет закрыто при вызове деструктора.
Могу ли я доверять вызываемому методу PHP __destruct ()?
Соединение устанавливается при вызове конструктора. Так что нет, вам не нужно вручную открывать / закрывать соединение с базой данных.