Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak mogę pingować bazę danych MySQL i ponownie połączyć się za pomocą PDO?

Próbowałem znaleźć rozwiązanie tego samego problemu i znalazłem następną odpowiedź:

class NPDO {
    private $pdo;
    private $params;

    public function __construct() {
        $this->params = func_get_args();
        $this->init();
    }

    public function __call($name, array $args) {
        return call_user_func_array(array($this->pdo, $name), $args);
    }

    // The ping() will try to reconnect once if connection lost.
    public function ping() {
        try {
            $this->pdo->query('SELECT 1');
        } catch (PDOException $e) {
            $this->init();            // Don't catch exception here, so that re-connect fail will throw exception
        }

        return true;
    }

    private function init() {
        $class = new ReflectionClass('PDO');
        $this->pdo = $class->newInstanceArgs($this->params);
    }
}

Pełna historia tutaj:https://terenceyim. wordpress.com/2009/01/09/adding-ping-function-to-pdo/


Ktoś inny myślał o użyciu PDO::ATTR_CONNECTION_STATUS , ale zorientował się, że:„$db->getAttribute(PDO::ATTR_CONNECTION_STATUS) odpowiada „Localhost przez gniazdo UNIX” nawet po zatrzymaniu mysqld”.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zmienić nazwę indeksu w MySQL?

  2. Jak pokazać procesy MySQL

  3. Błąd procedury składowanej mysql (1172, 'Wynik składał się z więcej niż jednego wiersza')

  4. przyznaj zdalny dostęp do bazy danych MySQL z dowolnego adresu IP

  5. Doctrine2 w Symfony2:Jak mogę zobaczyć, które wywołanie obiektu prowadzi do zapytania?