Просто довольно простой вопрос относительно 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 . Чтобы закрыть соединение, вам нужно уничтожить объект , убедившись, что все остальные ссылки на него удалены – вы делаете это, назначая NULL переменной, которая содержит объект. Если вы не сделаете это явно, PHP автоматически закроет соединение, когда ваш скрипт закончится .
Обратите внимание: если вы инициализируете объект PDO как постоянное соединение, он не будет автоматически закрывать соединение.
$conn=new PDO("mysql:host=$host;dbname=$dbname",$user,$pass); // If this is your connection then you have to assign null // to your connection variable as follows: $conn=null; // By this way you can close connection in PDO.
Я создал производный класс, чтобы иметь более самостоятельную документацию вместо «$ conn = null;».
class CMyPDO extends PDO { public function __construct($dsn, $username = null, $password = null, array $options = null) { parent::__construct($dsn, $username, $password, $options); } static function getNewConnection() { $conn=null; try { $conn = new CMyPDO("mysql:host=$host;dbname=$dbname",$user,$pass); } catch (PDOException $exc) { echo $exc->getMessage(); } return $conn; } static function closeConnection(&$conn) { $conn=null; } }
Поэтому я могу назвать свой код между:
$conn=CMyPDO::getNewConnection(); // my code CMyPDO::closeConnection($conn);