一、连接数据库
ThinkPHP内置了抽象数据库访问层,把不同的数据库操作封装起来,只需要使用公共的Db类(系统目录->Lib目录->Think目录->Db目录->Db.class.php)进行操作,而无需针对不同的数据库写不同的代码和底层实现,Db类会自动调用相应的数据库适配器(系统目录->Lib目录->Think目录->Db目录->Driver目录下的各个数据适配件),目前支持的数据库类型如下
ThinkPHP并不是一开始就会连接数据库,而是在有数据库操作时才会去连接数据库
在系统第一次操作模型的时候,ThinkPHP会自动连接数据库获取相关模型类的数据字段信息,并缓存下来,即数据库表字段缓存
1、配置数据库连接信息(推荐方式)
要想连接数据库,必须配置正确的数据库连接信息,而配置方式有多种
·项目配置件中配置
为了避免多个应用(lication)重复配置数据库连接信息,可以将数据库连接信息写到公用的配置件中去,比如说项目目录->config.php件(格式依然是按照访问一个数组)中,然后在各个应用的配置件中去接收项目目录->config.php件中返回的数组,并与自己的配置件中的其它配置数组合并(merge),最后返回
注意,include同一级目录下的件要么这样'http://www.toutiao.com/i6322199814553469442/件名',要么'件名',但是不能'.件名'
在项目配置件中配置数据库连接信息是推荐方式,还可以在调试配置件中配置数据库连接信息,那么在调试模式下后者生效,部署模式下前者生效
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函数,用来获取和设置配置件的配置项,在模块中读取,并分配到模板中