/** * @param $query * @param array $params * @param array $types * @param QueryCacheProfile $qcp * @return null * @throws \Exception */ public function executeQuery($query, array $params = array(), $types = array(), QueryCacheProfile $qcp = null) { $stmt = null; $attempt = 0; $retry = true; while ($retry) { $retry = false; try { $stmt = parent::executeQuery($query, $params, $types, $qcp); } catch (\Exception $e) { if ($this->validateReconnectAttempt($e, $attempt)) { $this->close(); $attempt++; $retry = true; } else { throw $e; } } } return $stmt; }