thinkphp可以單獨設定新資料庫嗎

2022-12-13 10:00:55

thinkphp可以單獨設定新資料庫,其設定方法是:1、在應用組態檔或者模組組態檔中新增設定引數如「'DB_HOST' => 'localhost'...」;2、在不同的應用狀態的組態檔裡面定義獨立的資料庫設定資訊;3、在範例化的時候指定資料庫連線資訊,語法如「$User = M('User','other_','mysql://root...」。

php入門到就業線上直播課:進入學習
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API偵錯工具:

本教學操作環境:Windows7系統、ThinkPHP5版、Dell G3電腦。

thinkphp可以單獨設定新資料庫嗎?

可以。

Thinkphp 模型-連線資料庫獨立設定model資料庫連線

連線資料庫

ThinkPHP內建了抽象資料庫存取層,把不同的資料庫操作封裝起來,我們只需要使用公共的Db類進行操作,而無需針對不同的資料庫寫不同的程式碼和底層實現,Db類會自動呼叫相應的資料庫驅動來處理。目前的資料庫包括Mysql、SqlServer、PgSQL、Sqlite、Oracle、Ibase、Mongo,也包括對PDO的支援。

如果應用需要使用資料庫,必須設定資料庫連線資訊,資料庫的組態檔有多種定義方式。

一、全域性設定定義

常用的設定方式是在應用組態檔或者模組組態檔中新增下面的設定引數:

//資料庫設定資訊'DB_TYPE' => 'mysql', // 資料庫型別
'DB_HOST' => 'localhost', // 伺服器地址
'DB_NAME' => 'thinkphp', // 資料庫名
'DB_USER' => 'root', // 使用者名稱
'DB_PWD' => '123456', // 密碼
'DB_PORT' => 3306, // 埠
'DB_PREFIX' => 'think_', // 資料庫表字首
'DB_CHARSET'=> 'utf8', // 字元集
登入後複製

資料庫的型別由DB_TYPE引數設定。

下面是目前支援的資料庫設定:

043e3bc30ed7aa6d626f61f1ff34a43.jpg

如果DB_TYPE使用PDO型別的話,資料庫型別則由DB_DSN設定決定。

或者採用如下設定

'DB_DSN' => 'mysql://root:123456@localhost:3306/thinkphp#utf8'
登入後複製

使用DB_DSN方式定義可以簡化設定引數,DSN引數格式為:

資料庫型別://使用者名稱:密碼@資料庫地址:資料庫埠/資料庫名#字元集

字元集設定需要3.2.1版本以上有效,字元集如果沒有設定的話,預設為utf8。

如果兩種設定引數同時存在的話,DB_DSN設定引數優先。

注意:如果要設定分散式資料庫,暫時不支援DB_DSN方式設定。

如果採用PDO驅動的話,則必須首先設定**DB_TYPE **為pdo,然後還需要單獨設定其他引數,例如:

//PDO連線方式
'DB_TYPE' => 'pdo', // 資料庫型別
'DB_USER' => 'root', // 使用者名稱
'DB_PWD' => '', // 密碼
'DB_PREFIX' => 'think_', // 資料庫表字首
'DB_DSN' => 'mysql:host=localhost;dbname=thinkphp;charset=UTF-8'
登入後複製

注意:PDO方式的DB_DSN設定格式有所區別,根據不同的資料庫型別設定有所不同,具體可以參考PHP手冊。

組態檔定義的資料庫連線資訊一般是系統預設採用的,因為一般一個應用的資料庫存取設定是相同的。該方法系統在連線資料庫的時候會自動獲取,無需手動連線。

可以對每個模組定義不同的資料庫連線資訊,如果開啟了偵錯模式的話,還可以在不同的應用狀態的組態檔裡面定義獨立的資料庫設定資訊。

二、模型類定義

如果在某個模型類裡面定義了connection屬性的話,則範例化該自定義模型的時候會採用定義的資料庫連線資訊,而不是組態檔中設定的預設連線資訊,通常用於某些資料表位於當前資料庫連線之外的其它資料庫,例如:

//在模型裡單獨設定資料庫連線資訊
namespace Home\ Model;
use Think\ Model;
class UserModel extends Model{
protected $connection = array(
'db_type' => 'mysql',
'db_user' => 'root',
'db_pwd' => '1234',
'db_host' => 'localhost',
'db_port' => '3306',
'db_name' => 'thinkphp',
'db_charset' => 'utf8',
);
}
登入後複製

也可以採用DSN方式定義,例如:

//在模型裡單獨設定資料庫連線資訊
namespace Home\ Model;
use Think\ Model;
class UserModel extends Model{
//或者使用DSN定義
protected $connection = 'mysql://root:1234@localhost:3306/thinkphp#utf8';
}
登入後複製

如果我們已經在組態檔中設定了額外的資料庫連線資訊,例如:

//資料庫設定1
'DB_CONFIG1' => array(
'db_type' => 'mysql',
'db_user' => 'root',
'db_pwd' => '1234',
'db_host' => 'localhost',
'db_port' => '3306',
'db_name' => 'thinkphp',
'db_charset'=> 'utf8',
),
//資料庫設定2
'DB_CONFIG2' => 'mysql://root:1234@localhost:3306/thinkphp#utf8';
登入後複製

那麼,我們可以把模型類的屬性定義改為:

//在模型裡單獨設定資料庫連線資訊
namespace Home\ Model;
use Think\ Model;
class UserModel extends Model{
//呼叫組態檔中的資料庫設定1
protected $connection = 'DB_CONFIG1';
}
//在模型裡單獨設定資料庫連線資訊
namespace Home\ Model;
use Think\ Model;
class InfoModel extends Model{
//呼叫組態檔中的資料庫設定1
protected $connection = 'DB_CONFIG2';
}
登入後複製

三、範例化定義

除了在模型定義的時候指定資料庫連線資訊外,我們還可以在範例化的時候指定資料庫連線資訊,例如:如果採用的是M方法範例化模型的話,也可以支援傳入不同的資料庫連線資訊,例如:

$User = M('User','other_','mysql://root:1234@localhost/demo#utf8');
登入後複製

表示範例化User模型,連線的是demo資料庫的other_user表,採用的連線資訊是第三個引數設定的。如果我們在專案組態檔中已經設定了DB_CONFIG2的話,也可以採用:

$User = M('User','other_','DB_CONFIG2');
登入後複製

需要注意的是,ThinkPHP的資料庫連線的惰性的,所以並不是在範例化的時候就連線資料庫,而是在有實際的資料操作的時候才會去連線資料庫(額外的情況是,在系統第一次範例化模型的時候,會自動連線資料庫獲取相關模型類對應的資料表的欄位資訊)。

推薦學習:《》

以上就是thinkphp可以單獨設定新資料庫嗎的詳細內容,更多請關注TW511.COM其它相關文章!