@alexdora
Топ-менеджер

PDO PHP, как завершить соединение?

Как убить соединение.
Посмотрел в инете доки, объекту присваивается null
$DBH = new PDO("mysql:host=$dbhost;dbname=$dbname", $dblogin , $dbpassword); 
$STP = $DBH->prepare("SET CHARACTER SET utf8");
if(!$STP->execute()) { echo "db is offline"; exit();}
/* Какой-то код с запросами */
$DBH = null;
/* Какой-то код дальше */

Но этот формат не работает. Соединение все равно открыто. Смотрю по Show process
  • Вопрос задан
  • 1457 просмотров
Решения вопроса 4
safenoob
@safenoob
stackoverflow.com/questions/18277233/pdo-closing-c...
The connection remains active for the lifetime of that PDO object. To close the connection, you need to destroy the object by ensuring that all remaining references to it are deleted--you do this by assigning NULL to the variable that holds the object. If you don't do this explicitly, PHP will automatically close the connection when your script ends.
Ответ написан
Комментировать
VELIK505
@VELIK505
Руководитель департамента profitcentr.com
Зачем? соединение само закроется. А вообще по мимо $DBH = null; надо и код с запросами приравнивать к null. ну этого делать не нужно.
Ответ написан
Для $STP надо тоже сделать $STP = null;
Поскольку объект подготовленного выражения неявно хранит в себе ссылку на соединение.
Ответ написан
Комментировать
@alexdora Автор вопроса
Топ-менеджер
Добавлю это сюда. Все объекты PDO иногда убить сложнее. Т.к они могут передоваться в другие, как у меня. Поэтому убийство соединения будет хорошим решением:

$DBH = new PDO("mysql:host=$dbhost;dbname=$dbname", $dblogin , $dbpassword); 
$STP = $DBH->prepare("SET CHARACTER SET utf8");
if(!$STP->execute()) { echo "db is offline"; exit();}
$CONNECTION_ID = 0;
$STP = $DBH->prepare("SELECT CONNECTION_ID()");
$STP->execute();
$ar = $STP->fetch();
$CONNECTION_ID = $ar[0];
/* КОД */
$STP = $DBH->prepare("KILL ".$CONNECTION_ID);
$STP->execute();


Код грязный, но кому надо исправит.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы