@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; не срабатывает.
Никак не могу понять, как надо закрыть соединение в данном случае.
  • Вопрос задан
  • 747 просмотров
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Немедленно выкинуть на помойку этот ад кромешный, извращающий все принципы программирования. Использовать оригинальный ПДО. Прочитать Error reporting basics.
Сделать обработку ошибок общую для всего РНР.

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

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

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

Похожие вопросы