# 数据库配置
在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 即可
![](https://box.kancloud.cn/a2bbc297c5b4b199b25540c78db69eab_493x81.png)
系统默认支持的数据库`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基础知识
- 1.运行流程
- 2.YAF架构
- 3.目录结构
- 4.Yaf的配置
- 5.Yaf的Bootstrap
- 6.Yaf的多模块配置
- 7.Yaf中使用命名空间
- 本书框架配置
- 1.框架目录结构
- 2.数据库配置
- 3.缓存配置
- 4.全局配置
- 5.公共助手函数
- 请求与响应
- 1.请求-Request
- 2.响应-Response
- 数据库操作
- 使用think-orm
- 接口开发
- 1.RESTful接口设计
- 2.Yar RPC接口设计
- 数据验证
- 数据验证 - validate
- 网页开发
- Session
- Cookie
- 路由设置
- 工具类
- 1.Rsa加密
- 2.Random快速生成随机数
- 3.Cache - 缓存
- 4.Weapp - 微信小程序类
- 5.Qiniu - 七牛云存储使用
- 6.支付类(微信&支付宝)
- 7.Logs - 日志记录