一、連接數據庫
ThinkPHP內置了抽象數據庫訪問層,把不同的數據庫操作封裝起來,只需要使用公共的Db類(系統目錄->Lib目錄->Think目錄->Db目錄->Db.class.php)進行操作,而無需針對不同的數據庫寫不同的代碼和底層實現,Db類會自動調用相應的數據庫適配器(系統目錄->Lib目錄->Think目錄->Db目錄->Driver目錄下的各個數據適配文件),目前支持的數據庫類型如下
ThinkPHP並不是一開始就會連接數據庫,而是在有數據庫操作時才會去連接數據庫
在系統第一次操作模型的時候,ThinkPHP會自動連接數據庫獲取相關模型類的數據字段信息,並緩存下來,即數據庫表字段緩存
1、配置數據庫連接信息(推薦方式)
要想連接數據庫,必須配置正確的數據庫連接信息,而配置方式有多種
·項目配置文件中配置
為了避免多個應用(Application)重復配置數據庫連接信息,可以將數據庫連接信息寫到公用的配置文件中去,比如說項目目錄->config.php文件(格式依然是按照訪問一個數組)中,然后在各個應用的配置文件中去接收項目目錄->config.php文件中返回的數組,並與自己的配置文件中的其它配置數組合並(merge),最后返回
注意,include同一級目錄下的文件要么這樣'./文件名',要么'文件名',但是不能'.文件名'
在項目配置文件中配置數據庫連接信息是推薦方式,還可以在調試配置文件中配置數據庫連接信息,那么在調試模式下后者生效,部署模式下前者生效
2、DSN方式
通常用於在模塊中手動連接數據庫,或者用於創建多個數據庫連接
3、DSN的數組方式
也是通常用於在模塊中手動連接數據庫,或者用於創建多個數據庫連接
4、模型(Model)中配置
即在模型中定義一個成員屬性,該成員屬性是一個包含數據庫連接信息的數組或字符串
那么在實例化模型對象時,就會使用該數據庫連接信息去連接數據庫,通常用於連接其它數據庫
二、主從數據庫
解決站點高負載、高並發的一種手段,因為從某種意義上說,站點的瓶頸落在了數據庫頭上
ThinkPHP的數據庫模型支持主從數據庫的連接,在項目配置文件中設置'DB_DEPLOY_TYPE'=>1即可開啟主從數據庫支持
注意,在所用的數據庫服務器端上也要進行數據庫集群(分布式數據庫)的設置
做完以上兩點配置之后,就可以對數據庫連接信息進行配置了,因為是連接主從數據庫,所以數據庫連接信息有些注意點
1、主從數據庫類型必須相同,即不能一個MySQL,一個Oracle
2、連接的數據庫個數取決於DB_HOST定義的數量,所以即使是兩個相同的IP也需要重復定義,但是其他的參數如果存在相同的可以不用重復定義
3、在未進行讀寫分離時,ThinkPHP會在讀/寫操作時,自動的去找主從服務器中的任意一台
4、讀寫分離,在實際開發中,是必須要進行讀寫分離的,因為一般來說,讀操作要比寫操作多得多
·配置:在項目配置文件中設置'DB_RW_SEPARATE'=>true即可開啟
·機制:一台主服務器,多台從服務器,主服務器是寫服務器,所有從服務器是讀服務器
5、主從數據庫數據信息同步不是ThinkPHP的事,是數據庫本身的事
6、字符集默認為utf8,注意,切記不要寫成utf-8!
ThinkPHP的C()函數,用來獲取和設置配置文件的配置項,在模塊中讀取,並分配到模板中