在mysql服务器消失后重新连接mysql

3wabscal  于 2021-06-20  发布在  Mysql
关注(0)|答案(0)|浏览(232)

下面是一个使用singleton的数据库类。我不确定我的checkdbconnection方法。当我得到 MySQL server has gone away 错误,我通过调用 $this->getInstance();checkDBconnnection() 我不停地 MySQL server has gone away 循环中出错。任何帮助都将不胜感激。谢谢

class DB {

    private $_mysqli, 
            $_query, 
            $_results = [], 
            $_count = 0;

    public static $instance;

    public static function getInstance(){

        if(!isset(self::$instance)){
            self::$instance = new DB();
        }
        return self::$instance;
    }

    public function  __construct() {

        $details = $this->mysqlUrl();
        $this->_mysqli =  new mysqli($details['host'], $details['user'], $details['pass'], $details['database']);
        if ($this->_mysqli->connect_error) {
            throw new expection("Connection failed: " . $this->_mysqli->connect_error);
        } 
    } 

    public function query($query){
        $this->checkDBconnnection();
        if($this->_query = $this->_mysqli->query($query)){
            if ($this->_query->num_rows > 1) {
                while($row = $this->_query->fetch_assoc()) {
                    $data[] = $row;
                }
            }

            if ($this->_query->num_rows <= 1) {
                $data[0] = $this->_query->fetch_assoc();
            }

            return $data;
        }
    }

    public function checkDBconnnection(){

        $state = false;
        log_message("checkDBconnnection", "Checking mysqli connection", "");
        while ($state == false){

            if ($this->_mysqli->ping()) {
                $state = true;
                log_message("checkDBconnnection", "mysqli state", $state);
            } else {

                sleep(30);
                $state = false;
                log_message("checkDBconnnection", "mysqli state", $this->_mysqli->error);
                log_message("checkDBconnnection", "Reconnecting to database", "");
                $this->getInstance();

            }
        }

    }
}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题