public function __construct(\Lib\DbConfig $dbConfig) { $maxTry = 3; $index = 1; \Lib\State::notice('Connecting to MySQL...'); while ($index <= $maxTry) { \Lib\State::notice('Try ' . $index . '...'); $index++; try { $pdo = new \PDO($dbConfig->getDsn(), $dbConfig->getUsername(), $dbConfig->getPasswd()); } catch (\Exception $e) { \Lib\State::warning($e->getMessage()); if ($index <= $maxTry) { \Lib\State::notice('Try to connect again after 3 seconds'); sleep(3); } continue; } break; } if (!isset($pdo) || !$pdo instanceof \PDO) { \Lib\State::notice($dbConfig->toString()); \Lib\State::error('MySQL connection failed.'); } $options = $dbConfig->getOptions(); if (!empty($options)) { foreach ($options as $option) { $pdo->query($option); } } \Lib\State::notice('connect successed'); $this->_db = $pdo; $this->_dbname = $dbConfig->getDbname(); }