实际工作中遇到上一次数据库访问和下一次数据库访问超过wait_timeout的情况, 此时就会报Mysql has gone away的错误.
利用mysql_ping可以解决:
1 现在数据库抽象层加入重连功能:
/**
* 重新连接数据库
*/
private function reconnect() {
$link = $this->_master_arr;
$link['new_link'] = true;
$this->_mas_link = $this->addConnect ( $link );
$this->_use_mas = true;
$this->_link = $this->_mas_link;
}
/**
* 检查数据库连接是否可用,如果不可用尝试重新连接
*/
private function checkConnect() {
if (! mysql_ping ( $this->_mas_link )) {
$this->reconnect ();
}
}
2 然后在查询语句前加入检测是否需要重连
/**
* 执行sql
*
* @param string $sql
* @param bool use_mas 是否使用主链接
* @return 记录集
*/
public function query($sql,$forece_mas_link = false) {