diff options
Diffstat (limited to 'inc/database.inc.php')
| -rw-r--r-- | inc/database.inc.php | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/inc/database.inc.php b/inc/database.inc.php index 83720baa..f928b7f5 100644 --- a/inc/database.inc.php +++ b/inc/database.inc.php @@ -31,15 +31,27 @@ class Database if (self::$dbh !== false) return true; self::$returnErrors = $returnErrors; - try { - self::$dbh = new PDO(CONFIG_SQL_DSN, CONFIG_SQL_USER, CONFIG_SQL_PASS, [ - PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, - PDO::ATTR_EMULATE_PREPARES => true, - PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4', // Somehow needed, even if charset=utf8mb4 is in DSN? - ]); - } catch (PDOException $e) { - if (self::$returnErrors) - return false; + for ($try = 0; $try < 10; ++$try) { + try { + self::$dbh = new PDO(CONFIG_SQL_DSN, CONFIG_SQL_USER, CONFIG_SQL_PASS, [ + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::ATTR_EMULATE_PREPARES => true, + PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4', + // Somehow needed, even if charset=utf8mb4 is in DSN? + ]); + break; + } catch (PDOException $e) { + if (self::$returnErrors) + return false; + if (strpos($e->getMessage(), '2002') !== false) { + // Code 2002 is "could not connect", mysql might be restarting + sleep(1); + continue; + } + break; + } + } + if (self::$dbh === false) { ErrorHandler::traceError('Connecting to the local database failed: ' . $e->getMessage()); } if (CONFIG_DEBUG) { |
