前篇文章,我們總結(jié)了下ThinkPHP3.2中所產(chǎn)生的新變化,本文我們來詳細(xì)看下關(guān)于數(shù)據(jù)庫這塊有哪些新特性,非常細(xì)致,有需要的小伙伴參考下。
ThinkPHP3.2.3版本數(shù)據(jù)庫驅(qū)動(dòng)采用PDO完全重寫,配置和使用上面也比之前版本更加靈活和強(qiáng)大,我們來了解下如何使用。
首先,3.2.3的數(shù)據(jù)庫配置信息有所調(diào)整,完整的數(shù)據(jù)庫設(shè)置包括:
代碼如下:
/* 數(shù)據(jù)庫設(shè)置 */
'DB_TYPE' => '', // 數(shù)據(jù)庫類型
'DB_HOST' => '', // 服務(wù)器地址
'DB_NAME' => '', // 數(shù)據(jù)庫名
'DB_USER' => '', // 用戶名
'DB_PWD' => '', // 密碼
'DB_PORT' => '', // 端口
'DB_PREFIX' => '', // 數(shù)據(jù)庫表前綴
'DB_PARAMS' => array(), // 數(shù)據(jù)庫連接參數(shù)
'DB_DEBUG' => TRUE, // 數(shù)據(jù)庫調(diào)試模式 開啟后可以記錄SQL日志
'DB_LITE' => false, // 使用數(shù)據(jù)庫Lite模式
'DB_FIELDS_CACHE' => true, // 啟用字段緩存
'DB_CHARSET' => 'utf8', // 數(shù)據(jù)庫編碼默認(rèn)采用utf8
'DB_DEPLOY_TYPE' => 0, // 數(shù)據(jù)庫部署方式:0 集中式(單一服務(wù)器),1 分布式(主從服務(wù)器)
'DB_RW_SEPARATE' => false, // 數(shù)據(jù)庫讀寫是否分離 主從式有效
'DB_MASTER_NUM' => 1, // 讀寫分離后 主服務(wù)器數(shù)量
'DB_SLAVE_NO' => '', // 指定從服務(wù)器序號(hào)
相對(duì)3.2.2版本來說,取消了如下設(shè)置參數(shù):
代碼如下:
'DB_FIELDTYPE_CHECK' // 3.2.3強(qiáng)制進(jìn)行字段類型檢測了
'DB_SQL_BUILD_CACHE' // 3.2.3取消了SQL創(chuàng)建緩存
'DB_SQL_BUILD_QUEUE' // 3.2.3取消了SQL創(chuàng)建緩存
'DB_SQL_BUILD_LENGTH' // 3.2.3取消了SQL創(chuàng)建緩存
'DB_SQL_LOG' // 由新增的DB_DEBUG參數(shù)取代
'DB_BIND_PARAM' // 新版采用PDO 自動(dòng)參數(shù)綁定 無需設(shè)置
新增的數(shù)據(jù)庫設(shè)置參數(shù)包括:
代碼如下:
'DB_DEBUG' //用于開啟數(shù)據(jù)庫調(diào)試模式,開啟后即可記錄SQL日志
'DB_LITE' // 是否采用數(shù)據(jù)庫Lite模式連接 開啟后只能使用原生SQL查詢
3.2.2版本數(shù)據(jù)庫的調(diào)試模式和項(xiàng)目的調(diào)試模式(由APP_DEBUG常量定義)是綁定的 ,3.2.3版本開始數(shù)據(jù)庫的調(diào)試模式是獨(dú)立設(shè)置(由DB_DEBUG參數(shù)設(shè)置)的。
DB_TYPE參數(shù)為數(shù)據(jù)庫類型設(shè)置,目前支持的驅(qū)動(dòng)包括mysql/sqlite/oracle/pgsql/sqlsrv/firebird(其他的數(shù)據(jù)庫類型需要增加驅(qū)動(dòng)),設(shè)置如下:
'DB_TYPE'=>'mysql', // 不再支持設(shè)置為PDO 也不再區(qū)分mysql和mysqli
復(fù)制代碼
數(shù)據(jù)庫的連接信息,主要包括下面參數(shù):
代碼如下:
'DB_HOST' => '', // 服務(wù)器地址 采用IP地址
'DB_NAME' => '', // 數(shù)據(jù)庫名
'DB_USER' => '', // 用戶名
'DB_PWD' => '', // 密碼
'DB_PORT' => '', // 端口 留空則取默認(rèn)端口
'DB_CHARSET' => '', // 數(shù)據(jù)庫編碼
以上設(shè)置參數(shù)會(huì)在實(shí)例化PDO的時(shí)候自動(dòng)轉(zhuǎn)換為PDO的連接參數(shù)傳入。
DB_DSN參數(shù)一般無需設(shè)置,系統(tǒng)的數(shù)據(jù)庫驅(qū)動(dòng)會(huì)進(jìn)行默認(rèn)設(shè)置,如果需要調(diào)整,請(qǐng)遵循PDO的相關(guān)數(shù)據(jù)庫連接的DSN設(shè)置進(jìn)行設(shè)置。
DB_PARAMS用于設(shè)置數(shù)據(jù)庫的連接參數(shù),會(huì)傳入PDO實(shí)例化的第四個(gè)參數(shù)。
下面是一個(gè)典型的數(shù)據(jù)庫全局設(shè)置:
代碼如下:
'DB_TYPE' => 'mysql', // 數(shù)據(jù)庫類型
'DB_HOST' => '192.168.1.10', // 服務(wù)器地址
'DB_NAME' => 'thinkphp', // 數(shù)據(jù)庫名
'DB_USER' => 'root', // 用戶名
'DB_PWD' => '1234', // 密碼
'DB_PORT' => '3306', // 端口
'DB_PREFIX' => 'think_', // 數(shù)據(jù)庫表前綴
'DB_CHARSET' => 'utf8', // 數(shù)據(jù)庫編碼
'DB_DEBUG' => TRUE, // 數(shù)據(jù)庫調(diào)試模式 開啟后可以記錄SQL日志
如果在模型類中設(shè)置單獨(dú)的數(shù)據(jù)庫連接信息connection屬性,可以使用下面的數(shù)組或者字符串方式:
代碼如下:
//在模型里單獨(dú)設(shè)置數(shù)據(jù)庫連接信息
namespace Home\Model;
use Think\Model;
class UserModel extends Model{
// 采用數(shù)組方式定義
protected $connection = array(
'db_type' => 'mysql',
'db_user' => 'root',
'db_pwd' => '1234',
'db_host' => '192.168.1.10',
'db_port' => '3306',
'db_name' => 'thinkphp',
'db_charset' => 'utf8',
);
}
注意:在模型中設(shè)置的數(shù)據(jù)庫連接設(shè)置參數(shù)采用全局配置的小寫名。
或者采用字符串方式定義,格式為:
數(shù)據(jù)庫類型://用戶名:密碼@數(shù)據(jù)庫地址:數(shù)據(jù)庫端口/數(shù)據(jù)庫名#字符集
例如:
代碼如下:
//在模型里單獨(dú)設(shè)置數(shù)據(jù)庫連接信息
namespace Home\Model;
use Think\Model;
class UserModel extends Model{
// 使用字符串方式定義
protected $connection = 'mysql://root:1234@192.168.1.10:3306/thinkphp#utf8';
}
也可以通過配置文件設(shè)置,例如:
代碼如下:
//數(shù)據(jù)庫配置1
'DB_CONFIG1' => array(
'db_type' => 'mysql',
'db_user' => 'root',
'db_pwd' => '1234',
'db_host' => '192.168.1.10',
'db_port' => '3306',
'db_name' => 'thinkphp',
'db_charset'=> 'utf8',
),
//數(shù)據(jù)庫配置2
'DB_CONFIG2' => 'mysql://root:1234@192.168.1.10:3306/thinkphp#utf8';
然后在模型里面定義:
代碼如下:
//在模型里單獨(dú)設(shè)置數(shù)據(jù)庫連接信息
namespace Home\Model;
use Think\Model;
class UserModel extends Model{
//調(diào)用配置文件中的數(shù)據(jù)庫配置1
protected $connection = 'DB_CONFIG1';
// 或者
protected $connection = 'DB_CONFIG2';
}
除了在模型定義的時(shí)候指定數(shù)據(jù)庫連接信息外,我們還可以在實(shí)例化的時(shí)候指定數(shù)據(jù)庫連接信息,如果采用的是M方法實(shí)例化模型的話,也可以支持傳入不同的數(shù)據(jù)庫連接信息,例如:
代碼如下:
$User = M('User','other_','mysql://root:1234@192.168.1.10/demo#utf8');
表示實(shí)例化User模型,連接的是demo數(shù)據(jù)庫的other_user表,采用的連接信息是第三個(gè)參數(shù)配置的。
如果我們?cè)陧?xiàng)目配置文件中已經(jīng)配置了DB_CONFIG2的話,也可以采用:
$User = M('User','other_','DB_CONFIG2');
以上就是本文的全部內(nèi)容了,希望大家能夠喜歡。
更多信息請(qǐng)查看IT技術(shù)專欄