Mysql
 sql >> база данни >  >> RDS >> Mysql

Codeigniter превключва към вторична база данни, ако основната не работи

Е, не знам дали това ще проработи, но всъщност можете да опитате това:

1) създайте 2 групи настройки на база данни (в 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) Изключете deubg, за да избегнете показването на db грешки и действителното убиване на вашия скрипт (направете го и за двете):

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

3) Можете да подадете TRUE към втория параметър, докато зареждате библиотеката, така че тя действително да има върната стойност; той връща самия обект на базата данни:

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

Сега можете просто да проверите за ресурса „ID на връзката“, за да видите дали е установена връзка или не:

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

Сега можете да решите да заредите друга DB, в случай че първата не се зареди. Недостатъкът обаче е, че всъщност не знаете защо db връзката не работи...

Що се отнася до това как да приложите това, може да искате да опитате да разширите класа на базата данни или, по-добре, да създадете своя собствена библиотека, която всъщност просто проверява дали връзката съществува или не, и заредете това вместо библиотеката на базата данни. Тъй като връща обект на база данни (освен когато всичките 2 връзки са неуспешни), тогава можете да работите върху това, както бихте направили с нормалния клас на база данни:

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. MySQL + Query за връщане на всички редове, които имат колони, които са „активни“ в друга таблица

  2. Не мога да осъществя JDBC връзка с MySQL (използвайки Java, IntelliJ и Linux)

  3. Как да съкращавам правилно таблиците?

  4. Отпечатайте резултата от mysqli SELECT Query

  5. Как да изберете всички таблици с име на колона и да актуализирате тази колона