Задать вопрос

Как восстановить соединение с MySQL через PDO в PHP-скрипте?

На сервере под Windows Server 2003 работает PHP-скрипт в режиме CLI (что-то вроде демона), он принимает данные и записывает их в базу.

Соединение с базой устанавливается через PDO с помощью самописного класса:
class DB {
    protected static $dbInstance;

    private function __construct() {
        return self;
    }
    private function __clone() {
        return self;
    }

    private function __wakeup() {
        return self;
    }

    public static function getDB () {
        if (is_null(self::$dbInstance)) {
            try {
                $cfg = Config::getConfig();
                self::$dbInstance = new PDO(
                    'mysql:host='.$cfg['dbHost'].';dbname='.$cfg['dbName'].''
                    , $cfg['dbUser']
                    , $cfg['dbPass']);
            }
            catch (PDOException $e) {
                return false;
            }
        }
        return self::$dbInstance;
    }
}


Когда данные идут непрерывно, соединение держится отлично. Но при простое скрипта более 17 часов (может быть и меньше) - данные перестают записываться. Проверка соединения на null результатов не принесла. Могу предположить, что надо как-то проверять состояние соединения.

Вопрос: как проверить наличие соединения с MySQL через PDO?
  • Вопрос задан
  • 5324 просмотра
Подписаться 3 Оценить Комментировать
Ответ пользователя Максим Гаврилов К ответам на вопрос (7)
thestump
@thestump
программист PHP
Лучше не терять соединение:
$this -> pdo = new \PDO(
                "mysql:host=" . $this -> DB_HOST . " ;dbname=" . $this -> DB_NAME . ";", 
                $this -> DB_USER, 
                $this -> DB_PW,
                array(\PDO::ATTR_PERSISTENT => true)
            );
Ответ написан
Комментировать