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

Kod zapalnik przełącza się na dodatkową bazę danych, jeśli podstawowa nie działa

Cóż, nie wiem, czy to zadziała, ale możesz spróbować tego:

1) utwórz 2 grupy ustawień bazy danych (w application/config/database.php):

// regular one..
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
//...

// second connection
$db['second']['hostname'] = 'localhost';
$db['second']['username'] = 'root';
//...

2) Wyłącz deubg, aby uniknąć wyświetlania błędów bazy danych i faktycznego zabijania skryptu (zrób to dla obu):

$db['default']['db_debug'] = FALSE;

3) Możesz przekazać TRUE drugiemu parametrowi podczas ładowania biblioteki, aby faktycznie miała wartość zwracaną; zwraca sam obiekt bazy danych:

$dbobject1 = $this->load->database('default',TRUE);
$dbobject2 = $this->load->database('second',TRUE);

Teraz możesz po prostu sprawdzić zasób „identyfikator połączenia”, aby sprawdzić, czy połączenie zostało nawiązane, czy nie:

if(FALSE === $dbobject1->conn_id)
{
  echo 'No connection established!';
}

Teraz możesz zdecydować o załadowaniu innej bazy danych w przypadku, gdy pierwsza nie zostanie załadowana. Minusem jest to, że tak naprawdę nie wiesz, dlaczego połączenie z bazą danych nie działało...

Jeśli chodzi o to, jak to zaimplementować, możesz spróbować rozszerzyć klasę bazy danych lub, lepiej, stworzyć własną bibliotekę, która w rzeczywistości sprawdza tylko, czy połączenie istnieje, czy nie, i załadować ją zamiast biblioteki bazy danych. Ponieważ zwraca obiekt bazy danych (oprócz sytuacji, gdy wszystkie 2 połączenia nie powiodą się), możesz pracować nad tym tak, jak w normalnej klasie bazy danych:

class Check_db {

     private $CI = '';
     public $DB1 = '';
     public $DB2 = '';

     function __construct()
     {
        $this->CI =&get_instance();
        $this->DB1 = $this->CI->load->database('default',TRUE);
        if(FALSE !== $this->DB1->conn_id)
        {
          return $this->DB1;
        }
        else
        {
          $this->DB2 = $this->CI->load->database('second',TRUE);
          if(FALSE !== $this->DB2->conn_id)
          {
            return $this->DB2;
          }
          else
          {
            return FALSE;
          }
        }
      }



  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 parsować dane obiektowe z bazy danych MySQL przy użyciu PHP PDO?

  2. Zamówienie niestandardowe MySQL

  3. Zachowanie MySQL GROUP BY

  4. zmienić kolejność tabeli na podstawie kolumny sortowania i innej wartości kolumny

  5. MySQL:efektywnie wypełniaj tabelę w ramach procedury składowanej