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;
}
}
}