sql >> Database >  >> RDS >> Mysql

Codeigniter schakelt over naar secundaire database als de primaire niet werkt

Nou, ik weet niet of dit gaat werken, maar je kunt dit echt proberen:

1) maak 2 groepen database-instellingen aan (in 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) Zet ​​deubg uit om te voorkomen dat db-fouten worden weergegeven en uw script daadwerkelijk wordt vernietigd (doe het voor beide):

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

3) U kunt een TRUE doorgeven aan de tweede parameter tijdens het laden van de bibliotheek, zodat deze daadwerkelijk een retourwaarde heeft; het geeft het database-object zelf terug:

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

Nu kunt u gewoon de bron "verbindings-ID" controleren om te zien of er een verbinding tot stand is gebracht of niet:

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

Nu kunt u besluiten om nog een DB te laden voor het geval de eerste niet laadt. Het nadeel is echter dat je eigenlijk niet weet waarom de db-verbinding niet werkte...

Wat betreft hoe je dit moet implementeren, zou je kunnen proberen de databaseklasse uit te breiden of, beter nog, je eigen bibliotheek te creëren die in feite alleen controleert of er een verbinding bestaat of niet, en deze laadt in plaats van de databasebibliotheek. Aangezien het een databaseobject retourneert (behalve wanneer alle 2 verbindingen mislukken), kunt u daaraan werken zoals u zou doen met de normale databaseklasse:

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. MySQL selecteer alle vermeldingen tussen twee datums, ongeacht het jaar

  2. postgres en python

  3. Hoe REPLACE() werkt in MariaDB

  4. Wat is de veiligste manier om html/css/js toe te voegen aan mysql?