1.數據庫切換
原因:在我們實際的項目開發中,經常會遇到一個項目使用多個數據庫,那么在使用thinkphp框架的時候,存在使用過程中數據庫轉換使用的問題,或者多個數據庫同時使用的問題,接下來一起研究研究如何切換數據庫。
首先,我們在使用tp框架的時候會預先定義數據庫連接和實例化的時候指定數據庫連接,這樣我們只能預定義連接一個數據庫,然而我們還可以在模型操作過程中動態的切換數據庫,支持切換到相同和不同的數據庫類型。
使用方法:
Model->db("數據庫編號","數據庫配置");
數據庫編號:數據庫編號用數字格式,對於已經調用過的數據庫連接,是不需要再傳入數據庫連接信息的,系統會自動記錄。對於默認的數據庫連接,內部的數據庫編號是0,因此為了避免沖突,請不要再次定義數據庫編號為0的數據庫配置。
數據庫配置:數據庫配置的定義方式:支持數組、字符串以及調用配置參數三種格式。
Db方法 調用后返回當前的模型實例,直接可以繼續進行模型的其他操作,所以該方法可以在查詢的過程中動態切換:
$this->db(1,"mysql://root:1234@www.xxx.com:3306/test")->query("查詢SQL");
該方法添加了一個編號為1的數據庫連接,並自動切換到當前的數據庫連接。
當第二次切換到相同的數據庫的時候,就不需要傳入數據庫連接信息了,可以直接使用:
$this->db(1)->query("查詢SQL");
那么,當我們需要切換回主數據庫時,只需要:
$this->db(0);
例如:定義一個主數據庫和一個副數據庫:
//主數據庫配置0 'DB_CONFIG1' = array( 'db_type' => 'mysql', 'db_user' => 'root', 'db_pwd' => '1234', 'db_host' => 'localhost', 'db_port' => '3306', 'db_name' => 'thinkphp' ), //副數據庫配置1 'DB_CONFIG2' => 'mysql://root:1234@www.xxx.com:3306/thinkphp';
對於上面例子中的數據庫切換:
$this->db(1,"DB_CONFIG1")->query("查詢SQL"); $this->db(2,"DB_CONFIG2")->query("查詢SQL");
那么在切換數據庫后,怎么指向我們需要用到的數據表呢? 使用table方法指定要操作的數據表。
$this->db(1)->table("top_user")->find();
