簡體   English   中英

Codeigniter / PHP檢查是否可以連接到數據庫

[英]Codeigniter/PHP check if can connect to database

我想用我的主數據庫備份我的只讀副本(即奴隸)數據庫但這個簡單的布爾我失敗了:

$config['hostname'] = "myReadReplicaDatabase.com";
//...$config['other_stuff']; other config stuff...
$db_obj=$CI->load->database($config, TRUE);

if(!$db_obj){
     $config['hostname'] = "myMasterDatabase.com";
     $db_obj=$CI->load->database($config, TRUE);
}

在終止我的只讀副本數據庫后,我希望布爾值計算為FALSE ,然后腳本使用我的主數據庫。 不幸的是,我收到了以下PHP錯誤:

Unable to connect to your database server using the provided settings.
Filename: core/Loader.php

我想要的只是連接返回true或false,有人知道如何在Codeigniter中執行此操作嗎?

Codeigniter論壇上的這個帖子回答了我的問題。

關鍵是不要自動初始化數據庫:

$db['xxx']['autoinit'] = FALSE; 

要抑制錯誤,您可以設置此項

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

然后在檢查db狀態的代碼中,檢查initialize()函數的TRUE / FALSE:

$db_obj = $this->database->load('xxx',TRUE);
  $connected = $db_obj->initialize();
  if (!$connected) {
  $db_obj = $this->database->load('yyy',TRUE);
} 

這是我的整個配置文件以供將來參考: https//gist.github.com/3749863

基於此處所述: 如果主服務器關閉,Codeigniter將切換到輔助數據庫

您可以檢查conn_id$db_obj

if ($db_obj->conn_id === false) {
    $config['db_debug'] = true;
    $config['hostname'] = "myMasterDatabase.com";
    $db_obj=$CI->load->database($config, TRUE);
}

這應該工作。

當您連接到數據庫時,它會在成功條件下返回具有連接ID的連接對象,否則返回false。

您可以檢查它以確保數據庫連接完成。

$db_obj=$CI->load->database($config, TRUE);
if($db_obj->conn_id) {
    //do something
} else {
    echo 'Unable to connect with database with given db details.';
}

如果您有任何其他問題,試試這個並告訴我。

try { 

// do database connection

} catch (Exception $e) {
  // DO whatever you want with the $e data, it has a default __toString() so just echo $e if you want errors or default it to connect another db, etc.
  echo $e->getMessage();

// Connect to secondary DB.
}

對於那些貶低我的人,你可以做到這一點。 異常將捕獲PDOException。

try {

    $pdo = new PDO($dsn, $username, $password);

} catch(PDOException $e) {

    mail('webmaster@example.com', 'Database error message', $e->getMessage());

    // and finally... attempt your second DB connection.

   exit;

}
$readReplica = @$CI->load->database($config, TRUE); // ommit the error
if ($readReplica->call_function('error') !== 0) {
    // Failed to connect
}

我不確定錯誤代碼(不確定它的int /字符串)並且附近沒有CI來測試它,但這個原則應該有效

我測試了所有我發現的東西,沒有任何東西,我找到的唯一方法是使用dbutil檢查數據庫是否存在,如下所示:

$this->load->database();
$this->load->dbutil();

// check connection details
if( !$this->dbutil->database_exists('myDatabase'))
    echo 'Not connected to a database, or database not exists';
$this->load->database();

print_r($this->db);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM