Intereting Posts
Добавление изображения в Excel в phpexcel в php Как проверить расположение памяти переменной в php? Могут ли методы PDO сбой и не бросать PDOException? PHP: Разделить многобайтовую строку (слово) на отдельные символы .htaccess или код защиты PHP от нескольких быстрых запросов нарезать большой файл на куски и загрузить с помощью ajax и html5 FileReader Почему, когда я отправляю значение текстового поля в AJAX скрипту PHP, он не работает и дает мне ошибку синтаксического анализа JSON? добавить разрыв строки между двумя переменными Можно ли изменить сообщение перенаправления по умолчанию в Symfony? Поместите содержимое файла в массив с разделителем и сохраните его в базе данных (php) Как отменить бит байта? Ошибка анализа: синтаксическая ошибка, неожиданное «else» (T_ELSE) Ошибка при загрузке внешнего XML-файла с помощью php через https: SSL3_GET_SERVER_CERTIFICATE Как сделать интеграцию входа в facebook на веб-сайте magento? Как узнать имя переменной внутри функции?

Закрытие соединения PDO

Просто довольно простой вопрос относительно 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);