• Страница 1 из 1
  • 1
Модератор форума: Dimitro, LightInDarkness  
[Вопрос] Соединение с базой данных
Quintessence
Центурион
Назрел вопрос даже не с соединением, а скорее, с отключением.
Есть класс бд, при инициализации делающий mysqli_connect()
По завершению работы скрипта, ядро сайта выполняет $this->db->disconnect(),
Которая рекурсивно гуляет по массиву $this->connection[] и для каждой строки выполняет mysqli_close().

Вопрос в следующем, можно ли $this->db->disconnect() перенести в деструктор?
И какие плюсы и минусы от этого могут появится?

Мои подозрения:
Т.к. объекты живут еще некоторое время после окончания работы скрипта, не будут ли создаваться лишние соединения, ведь используется непостоянное соединение.

Жду толковых ответов.
Уникальный рейтинг серверов http://rtop.biz
RTOP на WoWJP
Сообщение # 1 написано 19.08.2013 в 10:05
Flaker
Сержант
Цитата (Quintessence)
Мои подозрения: Т.к. объекты живут еще некоторое время после окончания работы скрипта, не будут ли создаваться лишние соединения, ведь используется непостоянное соединение.

Бред
Цитата (Quintessence)
Вопрос в следующем, можно ли $this->db->disconnect() перенести в деструктор? И какие плюсы и минусы от этого могут появится?

Минусы - никаких
Плюсы - не нужно будет в ручную закрывать соединение с БД
Сообщение # 2 написано 19.08.2013 в 14:05
Quintessence
Центурион
Цитата (Flaker)
Бред

Как в воду пернул.
Цитата (Flaker)
в ручную закрывать соединение с БД

Оно и так закрывается не вручную.
Уникальный рейтинг серверов http://rtop.biz
RTOP на WoWJP
Сообщение # 3 отредактировано Quintessence - Понедельник, 19.08.2013, 14:29
Zoorgan
Скаут
Зачем плодить кучу одинаковых соединений? Для таких вещей обычно используют шаблон проектирования singleton. Будут вопросы - пиши.
Сообщение # 4 написано 19.08.2013 в 16:37
Quintessence
Центурион
Опять таки мимо.

class db_mysqli_driver {

var $connection = array();

var $config = array();

var $allowed_connect = array();

var $con_conf = array();

public function __construct($config)
{
debug_log('Load database config and choose db.mysqli extension');
$this->config[0] = $config;
//if(!isset(self::$connection[0])){
debug_log('There no connection, trying to create it');
$this->connection[0] = mysqli_connect($this->config[0]['host'], $this->config[0]['username'], $this->config[0]['password'], $this->config[0]['dbnm'], $this->config[0]['port']);
if($this->connection[0])
{
debug_log('Connection to CMS database created');
........
}

function disconnect()
{
foreach($this->connection as $id => $con)
{
@mysql_close($con);
}
}

Повторяю вопрос:
$this->disconnect() пихать в __destruct() или просто выполнять в конце работы?
Уникальный рейтинг серверов http://rtop.biz
RTOP на WoWJP
Сообщение # 5 написано 19.08.2013 в 16:52
Vicher
Admin
На сколько мне известно, закрывать соединения стоит только если от момента, когда уже не они нужны, до завершения работы скрипта еще много чего нужно сделать. PHP сам закрывает все открытые соединения (кроме persistent). Правда процесс может повиснуть, но это уже совсем другая история.
Сообщение # 6 отредактировано Vicher - Понедельник, 19.08.2013, 20:00
Zoorgan
Скаут
Цитата (Quintessence)
Опять таки мимо.


Почему же мимо? Реализация через singletone избавляет нас от кучи экземпляров объекта нашего класса для подключения к бд и самих подключений. Остается одно подключение, которые мы не закрываем. Как уже писал Vicher, соединение закроется само, если его долго не использовать.
Сообщение # 7 написано 20.08.2013 в 00:17
RazArt
Тазовод
Zoorgan, а если я в нем создам 10к подключений?
DumpMe v1.0 - система автоматического переноса персонажей

Вышла в свет первая стабильная версия. Писать в скайп - razart8
Сообщение # 8 написано 20.08.2013 в 09:37
Zoorgan
Скаут
Цитата (RazArt)
Zoorgan, а если я в нем создам 10к подключений?


При реализации singletone 10к подключений вы не создадите ну никак. В памяти будет висеть один экземпляр класса и следовательно только одно подключение.
Сообщение # 9 отредактировано Zoorgan - Вторник, 20.08.2013, 14:58
  • Страница 1 из 1
  • 1
Поиск: