* API/MySQL: automatic try to reconnect once, if server closed connection "MySQL server has gone away"

This commit is contained in:
Ralf Becker 2014-09-22 10:25:03 +00:00
parent fcfc326b4c
commit f130294bbf

View File

@ -618,9 +618,11 @@ class egw_db
* @param int $num_rows number of rows to return (optional), default -1 = all, 0 will use $GLOBALS['egw_info']['user']['preferences']['common']['maxmatchs'] * @param int $num_rows number of rows to return (optional), default -1 = all, 0 will use $GLOBALS['egw_info']['user']['preferences']['common']['maxmatchs']
* @param array/boolean $inputarr array for binding variables to parameters or false (default) * @param array/boolean $inputarr array for binding variables to parameters or false (default)
* @param int $fetchmode =egw_db::FETCH_BOTH egw_db::FETCH_BOTH (default), egw_db::FETCH_ASSOC or egw_db::FETCH_NUM * @param int $fetchmode =egw_db::FETCH_BOTH egw_db::FETCH_BOTH (default), egw_db::FETCH_ASSOC or egw_db::FETCH_NUM
* @param boolean $reconnect =true true: try reconnecting if server closes connection, false: dont (mysql only!)
* @return ADORecordSet or false, if the query fails * @return ADORecordSet or false, if the query fails
* @throws egw_exception_db_invalid_sql with $this->Link_ID->ErrorNo() as code
*/ */
function query($Query_String, $line = '', $file = '', $offset=0, $num_rows=-1,$inputarr=false,$fetchmode=egw_db::FETCH_BOTH) function query($Query_String, $line = '', $file = '', $offset=0, $num_rows=-1, $inputarr=false, $fetchmode=egw_db::FETCH_BOTH, $reconnect=true)
{ {
unset($line, $file); // not used anymore unset($line, $file); // not used anymore
@ -675,9 +677,14 @@ class egw_db
} }
if (!$this->Query_ID) if (!$this->Query_ID)
{ {
if ($reconnect && $this->Type == 'mysql' && $this->Errno == 2006) // Server has gone away
{
$this->disconnect();
return $this->query($Query_String, $line, $file, $offset, $num_rows, $inputarr, $fetchmode, false);
}
throw new egw_exception_db_invalid_sql("Invalid SQL: ".(is_array($Query_String)?$Query_String[0]:$Query_String). throw new egw_exception_db_invalid_sql("Invalid SQL: ".(is_array($Query_String)?$Query_String[0]:$Query_String).
"\n$this->Error ($this->Errno)". "\n$this->Error ($this->Errno)".
($inputarr ? "\nParameters: '".implode("','",$inputarr)."'":'')); ($inputarr ? "\nParameters: '".implode("','",$inputarr)."'":''), $this->Errno);
} }
return $this->Query_ID; return $this->Query_ID;
} }