Reconnecting to MySQL server has disappeared

How can I change this class to catch an exception when MySQL Server Goe Away and reconnect?

<?php class DBConn { private $conn; public function __construct( $persistent = false ) { try { $this->conn = new PDO( "mysql:host=localhost;dbname=test", 'test', "hoollaahaoo" ); $this->conn->exec( "SET CHARACTER SET utf8" ); $this->conn->setAttribute( PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC ); if ( $persistent ) $this->conn->setAttribute( PDO::ATTR_PERSISTENT, true ); } catch( PDOException $e ) { return $e->getMessage(); } } public function getConn() { return $this->conn; } } 
+6
source share
1 answer

you probably need to create your own class like this

  • remove try/except from __construct
  • then connect to you db as follows:
  $ conn = null;
 $ limit = 10;
 $ counter = 0;
 while (true) {
   try {
     $ conn = DBConn ();
     break;
   }
   catch (Exception $ e) {
     $ conn = null;
     $ counter ++;
     if ($ counter == $ limit)
       throw $ e;
   }

 } 

EDIT 1 :

but if you say that your server is leaving ... then maybe something like this

 protected function _connect( $persistent = false ) { $conn = null; $limit = 10; $counter = 0; while (true) { try { $this->conn = new PDO( "mysql:host=localhost;dbname=test", 'test', "hoollaahaoo" ); $this->conn->exec( "SET CHARACTER SET utf8" ); $this->conn->setAttribute( PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC ); if ( $persistent ) $this->conn->setAttribute( PDO::ATTR_PERSISTENT, true ); } catch (Exception $e) { $conn = null; $counter++; if ($counter == $limit) throw $e; } } public function __construct( $persistent = false ) { $this->_connect($persistent); } 
+3
source

Source: https://habr.com/ru/post/893784/


All Articles