|
|
Модератор форума: Dimitro, LightInDarkness |
Форум Web раздел Web форум [Вопрос] Соединение с базой данных |
[Вопрос] Соединение с базой данных |
Назрел вопрос даже не с соединением, а скорее, с отключением.
Есть класс бд, при инициализации делающий mysqli_connect() По завершению работы скрипта, ядро сайта выполняет $this->db->disconnect(), Которая рекурсивно гуляет по массиву $this->connection[] и для каждой строки выполняет mysqli_close(). Вопрос в следующем, можно ли $this->db->disconnect() перенести в деструктор? И какие плюсы и минусы от этого могут появится? Мои подозрения: Т.к. объекты живут еще некоторое время после окончания работы скрипта, не будут ли создаваться лишние соединения, ведь используется непостоянное соединение. Жду толковых ответов.
Сообщение # 1 написано 19.08.2013 в 10:05
|
Цитата (Quintessence) Мои подозрения: Т.к. объекты живут еще некоторое время после окончания работы скрипта, не будут ли создаваться лишние соединения, ведь используется непостоянное соединение. Бред Цитата (Quintessence) Вопрос в следующем, можно ли $this->db->disconnect() перенести в деструктор? И какие плюсы и минусы от этого могут появится? Минусы - никаких Плюсы - не нужно будет в ручную закрывать соединение с БД
Сообщение # 2 написано 19.08.2013 в 14:05
|
Цитата (Flaker) Бред Как в воду пернул. Цитата (Flaker) в ручную закрывать соединение с БД Оно и так закрывается не вручную. |
Опять таки мимо.
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() или просто выполнять в конце работы?
Сообщение # 5 написано 19.08.2013 в 16:52
|
На сколько мне известно, закрывать соединения стоит только если от момента, когда уже не они нужны, до завершения работы скрипта еще много чего нужно сделать. PHP сам закрывает все открытые соединения (кроме persistent). Правда процесс может повиснуть, но это уже совсем другая история.
|
Цитата (Quintessence) Опять таки мимо. Почему же мимо? Реализация через singletone избавляет нас от кучи экземпляров объекта нашего класса для подключения к бд и самих подключений. Остается одно подключение, которые мы не закрываем. Как уже писал Vicher, соединение закроется само, если его долго не использовать.
Сообщение # 7 написано 20.08.2013 в 00:17
|
Цитата (RazArt) Zoorgan, а если я в нем создам 10к подключений? При реализации singletone 10к подключений вы не создадите ну никак. В памяти будет висеть один экземпляр класса и следовательно только одно подключение. |
| |||
| |||