在thinkyaf的集成里,將數據庫的配置文件單獨拆解出來了;數據庫的組件,借用的是ThinkPHP5.的輪子
在應用配置目錄下面的`db.ini`中(后面統稱為數據庫配置文件)配置下面的數據庫參數:
### 配置如下:
> [common]
> ;數據庫配置
> db.type = "mysql"
> db.dsn = ""
> db.hostport = "3306"
> db.charset = "utf8"
> db.prefix = "ymf_"
> db.debug = true
> ; 數據庫部署方式:0 集中式(單一服務器),1 分布式(主從服務器)
> db.deploy = 0
> ;數據庫讀寫是否分離 主從式有效
> db.rw_separate = false
> ;讀寫分離后 主服務器數量
> db.master_num = 1
> ;指定從服務器序號
> db.slave_no = ''
> ;是否嚴格檢查字段是否存在
> db.fields_strict = true
> ;數據集返回類型
> db.resultset_type = 'array'
> ;自動寫入時間戳字段
> db.auto_timestamp = false
> ;時間字段取出后的默認時間格式
> db.datetime_format = 'Y-m-d H:i:s'
> db.sql_explain = false
> ; 線上配置
> [product : common]
>
> ; 開發配置
> [develop : common]
> db.hostname = "192.168.33.101"
> db.database = "mysql"
> db.username = "root"
> db.password = "123456"
> ;是否需要進行SQL性能分析
> db.sql_explain = false
>
#### 注意在這里有
common ;
product : common ;
develop : common
common代表數據庫全局共用配置;
product代表線上配置;
develop 代表開發時候的配置
這樣我們就可以線上線下配置不同的數據庫地址和端口,在進行部署的時候無需去改動數據庫配置
只需要將 入口文件里的 APP_ENV 改成 product 即可

系統默認支持的數據庫`type`包括:
| type | 數據庫 |
| --- | --- |
| mysql | MySQL |
| sqlite | SqLite |
| pgsql | PgSQL |
| sqlsrv | SqlServer |
`type`參數支持命名空間完整定義,不帶命名空間定義的話,默認采用`\think\db\connector`作為命名空間,如果使用應用自己擴展的數據庫驅動,可以配置為:
~~~
// 數據庫類型
'type' => '\org\db\Mysql',
~~~
表示數據庫的連接器采用?`\org\db\Mysql`類作為數據庫連接驅動,而不是默認的`\think\db\connector\Mysql`。
~~~
或者使用字符串方式:
~~~
Db::connect('mysql://root:1234@127.0.0.1:3306/thinkphp#utf8');
~~~
~~~
> `connect`方法必須在查詢的最開始調用,否則可能會導致部分查詢失效。
字符串DSN連接的定義格式為:
> #### 數據庫類型://用戶名:密碼@數據庫地址:數據庫端口/數據庫名#字符集
> 字符串方式可能無法定義某些參數,例如前綴和連接參數。
~~~
和前面一種方法配置一樣,`connection`屬性可以支持數組和字符串方式。
> 需要注意的是,ThinkPHP的數據庫連接是惰性的,所以并不是在實例化的時候就連接數據庫,而是在有實際的數據操作的時候才會去連接數據庫。
## 數據庫調試模式
無論應用是否部署模式,數據庫有自己獨立的調試模式開關,數據庫配置參數中的`debug`參數就是數據庫調試模式的開關(默認關閉)。
~~~
// 數據庫調試模式
'debug' => true,
~~~
數據庫調試模式開啟后,可以支持下列行為:
* 記錄SQL日志;
* 分析SQL性能;
* 支持SQL監聽;
由于上述行為不可避免會產生額外的開銷,因此對性能存在一定的影響,但并不大,因為所有的日志是最終統一一次性寫入,而且可以設置為某個用戶才寫入日志。
> 在生產模式下面,必須關閉應用調試模式(`app_debug`),否則會暴露你的服務器敏感信息。和應用調試模式不同,開啟數據庫調試模式并不會對外暴露任何安全信息,因此是否開啟數據庫調試模式,看自己的需求。
~~~
## 配置參數參考
下面是默認支持的數據庫連接信息:
| 參數名 | 描述 | 默認值 |
| --- | --- | --- |
| type | 數據庫類型 | 無 |
| hostname | 數據庫地址 | 127.0.0.1 |
| database | 數據庫名稱 | 無 |
| username | 數據庫用戶名 | 無 |
| password | 數據庫密碼 | 無 |
| hostport | 數據庫端口號 | 無 |
| dsn | 數據庫連接dsn信息 | 無 |
| params | 數據庫連接參數 | 空 |
| charset | 數據庫編碼 | utf8 |
| prefix | 數據庫的表前綴 | 無 |
| debug | 是否調試模式 | false |
| deploy | 數據庫部署方式:0 集中式(單一服務器),1 分布式(主從服務器) | 0 |
| rw_separate | 數據庫讀寫是否分離 主從式有效 | false |
| master_num | 讀寫分離后 主服務器數量 | 1 |
| slave_no | 指定從服務器序號 | 無 |
| fields_strict | 是否嚴格檢查字段是否存在 | true |
| resultset_type | 數據集返回類型 | array |
| auto_timestamp | 自動寫入時間戳字段 | false |
| sql_explain | 是否需要進行SQL性能分析 開啟調試有效 | false |
| query | 指定查詢對象 | think\db\Query |
常用數據庫連接參數(`params`)可以參考[PHP在線手冊](http://php.net/manual/zh/pdo.constants.php)中的以`PDO::ATTR_`開頭的常量。
> #### 注意:
>
> * * *
>
> 如果是使用`pgsql`數據庫驅動的話,請先導入?`thinkphp/library/think/db/connector/pgsql.sql`文件到數據庫執行。
- 序言
- 安裝 Yaf
- Yaf基礎知識
- 運行流程
- YAF架構
- 目錄結構
- Yaf的配置
- Yaf的Bootstrap
- Yaf的多模塊配置
- Yaf中使用命名空間
- 本書框架配置
- 框架目錄結構
- 數據庫配置
- 緩存配置
- 全局配置
- 公共助手函數
- 請求與響應
- 請求-Request
- 響應-Response
- 數據庫操作
- 使用think-orm
- 接口開發
- RESTful接口設計
- Yar RPC接口設計
- 數據驗證
- 數據驗證 - validate
- 網頁開發
- Session
- Cookie
- 路由設置
- 工具類
- Rsa加密
- Random快速生成隨機數
- Cache - 緩存
- Weapp - 微信小程序類
- Qiniu - 七牛云存儲使用
- 支付類(微信&支付寶)
- Logs - 日志記錄