顾名思义,连接类的作用就是连接数据库,也称为连接器。我们知道,不同的数据库的连接方式和参数都是不同的,连接类就是要解决这个差异问题。数据库入口类里面实例化的类其实就是对应数据库的连接类,连接类的基类是think\db\Connection。例如,需要连接Mysql数据库的话,就必须定义一个Mysql连接类(内置由think\db\connector\Mysql类实现,继承了think\db\Connection类),当然具体的连接类名没有固定的规范(例如,MongoDb的连接类就是think\mongo\Connection)。如果某个数据库的连接扩展类没有继承think\db\Connection,那就意味着所有的数据库底层操作有可能被接管,在个别特殊的数据库的扩展中就有类似的实现,例如MongoDb数据库扩展。
连接器是数据访问层的基础,基于PHP本身的PDO实现,连接类的主要作用就是连接具体的数据库,以及完成基本的数据库底层操作,包括对分布式、存储过程和事务的完善处理。而更多的数据操作则交由查询类完成。如果是仅仅使用原生SQL查询的话,只需要使用连接类就卡可以了(通过调用Db类完成)。连接器类的作用小结:链接数据库;获取数据表和字段信息;基础查询(原生查询);事务支持;分布式支持;
查询器类Query除了基础的原生查询可以在连接类完成之外,其它的查询操作都是调用查询类的方法,查询类内完成了数据访问层最重要的工作,衔接了连接类和生成类,统一了数据库的查询用法,所以查询类是不需要单独驱动配合的,我们也称之为查询器。无论采用什么数据库,我们的查询方式是统一的,因为数据访问层核心只有一个唯一的查询类:think\db\Query。
Query类封装了所有的数据库CURD方法的优雅实现,包括链式方法及各种查询,并自动使用了PDO参数绑定(参数自动绑定是在生成器类解析生成SQL时完成),最大程度地保护你的程序避免受数据库注入攻击,查询操作会调用生成类生成对应数据库的SQL语句,然后再调用连接类提供的底层原生查询方法执行最终的数据库查询操作。
所有的数据库查询都使用了PDO的预处理和参数绑定机制。你所看到的大部分数据库方法都来自于查询类而并非Db类,这一点很关键,也就是说虽然我们始终使用Db类操作数据库,而实际上大部分方法都是由查询器类提供的方法。
数据库的配置参数有很大的学问,也是你掌握数据库操作的基础,主要用于数据库的连接以及查询的相关设置。数据库的配置参数用于连接类的架构方法,而由于我们并不直接操作连接类,所以,配置参数主要通过Db类传入并设置到当前的数据库连接类。数据库配置分为静态配置和动态配置两种方式,静态配置是指在数据库配置文件中进行配置,动态配置是指在Db类或者Query类的connect方法中传入动态的配置参数。安装好ThinkPHP5之后,默认在application目录下面会有一个da文件,这就是应用的数据库配置文件,如果你的模块需要单独的数据库配置文件,那么只需要在模块目录下面创建一个da文件即可,并且只需要定义和应用数据库配置文件有差异的部分。数据库配置文件中配置的是默认的数据库连接配置,如果你有多个数据库连接,额外的数据库连接是在应用配置文件中完成的(参考后面的动态数据库连接)。默认的应用数据库配置文件如下:
最关键的参数就是下面几个:
type参数严格来说其实配置的是连接类名(而不是数据库类型),支持命名空间完整定义,不带命名空间定义的话,默认采用\think\db\connector作为命名空间(内置连接类的命名空间)。