Просто довольно простой вопрос относительно PDO по сравнению с MySQLi.
С MySQLi, чтобы закрыть соединение, вы можете:
$this->connection->close();
Однако с PDO он заявляет, что вы открываете соединение, используя:
$this->connection = new PDO();
но чтобы закрыть установленное вами соединение null
.
$this->connection = null;
Это правильно, и действительно ли это освободит соединение PDO? (Я знаю, что это так, как установлено null
.) Я имею в виду, что с MySQLi вам нужно вызвать функцию ( close
), чтобы закрыть соединение. PDO так же просто, как = null
отключить? Или есть функция закрытия соединения?
Ответы:
Согласно документации, вы правы ( http://php.net/manual/en/pdo.connections.php ):
Обратите внимание, что если вы инициализируете объект PDO как постоянное соединение, он не будет автоматически закрывать соединение.
источник
Note that if you initialise the PDO object as a persistent connection it will not automatically close the connection
Но если соединение является постоянным, и я явно вызываю на нем NULL до завершения скрипта, оно будет закрыто, даже если оно постоянное, правильно?источник
Это больше, чем просто установка нулевого соединения. Это может быть то, что говорится в документации, но это не правда для mysql. Соединение будет оставаться немного дольше (я слышал 60-е, но никогда не тестировал)
Если вы хотите, чтобы здесь было полное объяснение, см. Этот комментарий о подключениях https://www.php.net/manual/en/pdo.connections.php#114822
Чтобы принудительно закрыть соединение, вам нужно сделать что-то вроде
источник
Я создал производный класс, чтобы иметь более самодокументирующуюся инструкцию вместо «$ conn = null;».
Так что я могу вызвать свой код между:
источник
closeConnection
не должен знать, что ему нужно скопировать ссылку на переменную вместо присвоения объекта. Другими словами, ваш способ попробовать кодировать функцию close PDO имеет плохие побочные эффекты, что делает его ненадежным. Единственный способ сделать это -closeConnection
проверить, сколько ссылок на объект PDO существует в коде, и бросить в случае, если существует более 1.Полный пример с пользовательским классом PDO2.
источник