MySQL server has gone away的报错已修正

BIWEB使用了PDO的长连接,为了避免执行一次网页请求,而多次建立数据库连接。

BIWEB在底层类库里建立了如下方法:

public function db($arrGPdoDB=null){
    if(!empty($arrGPdoDB)) $this->arrGPdoDB = $arrGPdoDB;
    $this->setDBG($this->arrGPdoDB);
    if(is_object($this->arrGPdoDB[$this->arrGPdoDB['db_name'].$this->arrGPdoDB['db_host']])) 
	$this->db = $this->arrGPdoDB[$this->arrGPdoDB['db_name'].$this->arrGPdoDB['db_host']];
    else{
	$this->db = $this->connectG();
	$this->arrGPdoDB[$this->arrGPdoDB['db_name'].$this->arrGPdoDB['db_host']] = $this->db;
    }
}


$this->arrGPdoDB[$this->arrGPdoDB['db_name'].$this->arrGPdoDB['db_host']]这里存的就是上次mysql的连接句柄,但是由于种种原因可能导致这个句柄失效了,就会造成MySQL server has gone away的报错。

为此我做了mysql_ping的判断来确定这个句柄是否还有效。

public function db($arrGPdoDB=null){
	if(!empty($arrGPdoDB)) $this->arrGPdoDB = $arrGPdoDB;
	$this->setDBG($this->arrGPdoDB);
	if(is_object($this->arrGPdoDB[$this->arrGPdoDB['db_name'].$this->arrGPdoDB['db_host']])&&mysql_ping($this->arrGPdoDB[$this->arrGPdoDB['db_name'].$this->arrGPdoDB['db_host']])) 
		$this->db = $this->arrGPdoDB[$this->arrGPdoDB['db_name'].$this->arrGPdoDB['db_host']];
	else{
		$this->db = null;
		$this->db = $this->connectG();
		$this->arrGPdoDB[$this->arrGPdoDB['db_name'].$this->arrGPdoDB['db_host']] = $this->db;
	}
}

BIWEB是跨设备跨平台兼容,一站多发,操作方便的WEBAPP手机网站系统

BIWEB自2005年推出后,经过不断的在各种大型项目中实践、总结、开发设计出来的一个快速开发、简单易用的面向对象的企业应用级PHP MVC建站系统。至2013年8月BIWEB推出webapp版本,标志着BIWEB从电脑网站系统正式步入移动端应用系统时代。

联系我们

上海徐汇区漕溪路165号1209室

13367735767,

info@biweb.cn

客服:1953680398

Back to Top