thinkphp可以單獨配置新資料庫,其設定方法為:1、在應用程式設定檔或模組設定檔中新增設定參數如“'DB_HOST' => 'localhost'...”;2、在不同的應用程式狀態的設定檔裡面定義獨立的資料庫設定資訊;3、在實例化的時候指定資料庫連線訊息,語法如「$User = M('User','other_','mysql://root ....」。
本教學操作環境: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參數設定。
下面是目前支援的資料庫設定:
如果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影片教學》
以上是thinkphp可以單獨配置新資料庫嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!