Ну, я не знаю, будет ли это работать, но вы можете попробовать это:
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) Отключите отладку, чтобы не показывать ошибки БД и фактически убивать ваш скрипт (сделайте это для обоих):
$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 не работает, хотя ...
Что касается того, как реализовать это, вы можете попробовать расширить класс базы данных или, что лучше, создатьВы владеете библиотекой, которая фактически проверяет, существует ли соединение или нет, и загружаете ее вместо библиотеки базы данных.Так как он возвращает объект базы данных (за исключением случаев, когда все 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;
}
}
}