在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`文件到数据库执行。