summaryrefslogtreecommitdiffstats
path: root/inc/database.inc.php
diff options
context:
space:
mode:
Diffstat (limited to 'inc/database.inc.php')
-rw-r--r--inc/database.inc.php30
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) {