@web5talker1

Как закрыть PDO соединение mysql?

Чтобы закрыть соединение в MySql PDO надо сделать так:
$DBH = null;
Но я использую обёртку:
Спойлер

<?php
class DB extends PDO
{
    public $error = false; // выводить сообщения об ошибках на экран? (true/false)
    
    public function __construct($dsn, $username='', $password='', $driver_options=array()) {
        try {
            parent::__construct($dsn, $username, $password, $driver_options);
                
            $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $this->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('DBStatement', array($this)));
            
            $this->query("SET NAMES 'utf8'");                 
        } catch(PDOException $e) { 
            echo "Произошла ошибка в работе с базой данных...";
            exit();
        }
    }
    
    public function prepare($sql, $driver_options=array()) {
        try {
            return parent::prepare($sql, $driver_options);
        } catch(PDOException $e) { 
            $this->error($e->getMessage());
        }
    }
    
    public function query($sql) {
        try {
            return parent::query($sql);
        } catch(PDOException $e) { 
            $this->error($e->getMessage());
        }
    }
    
    public function exec($sql) {
        try {
            return parent::exec($sql);
        } catch(PDOException $e) { 
            $this->error($e->getMessage());
        }
    }
    
    public function error($msg) {
        if($this->error) {
            echo $msg;
        } else {
            echo "Произошла ошибка в работе с базой данных...";
        }
        exit();
    }
    
   
}

class DBStatement extends PDOStatement 
{
    protected $DBH;
    
    protected function __construct($DBH) {
        $this->DBH = $DBH;
    }
 
    public function execute($data=array())
{
    try {
        parent::execute($data);
        return $this; 
    } 
    catch(PDOException $e) {
        $this->DBH->error($e->getMessage());
    }
}
}
 
?>


И $DBH=null; не срабатывает.
Никак не могу понять, как надо закрыть соединение в данном случае.
  • Вопрос задан
  • 729 просмотров
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Немедленно выкинуть на помойку этот ад кромешный, извращающий все принципы программирования. Использовать оригинальный ПДО. Прочитать Error reporting basics.
Сделать обработку ошибок общую для всего РНР.

Заодно пропадет и проблема с закрытием соединения.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
тип такого
public function disconnect() {
	$this->DBH = null;
}

DB->disconnect();
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
26 апр. 2024, в 10:01
500 руб./за проект
26 апр. 2024, в 09:18
500 руб./в час
26 апр. 2024, в 06:46
1500 руб./в час