ThinkPHP3.0完全开发手册                                           

 

13.5.1          数据库驱动

数据库抽象层的设计是由抽象数据库类(Db)和数据库驱动类组成的,内置的数据库驱动是MySQLMySQLi驱动类,官方的扩展还提供了MsSQLPgSQLSqliteOracleIbaseMongo以及PDO驱动类,可以满足常用的数据库操作的需要。

数据库驱动扩展目录位于系统扩展目录Extend/Driver/Db,如果需要扩展其他的数据库驱动类,只需要继承Db类,驱动类的命名规范是:

Db+驱动类名称(首字母大写)

例如,假如你需要扩展一个ODBC的数据库驱动,应该命名为:DbOdbc.class.php,并放到系统扩展目录 Extend/Driver/Db目录下面。

Class DbOdbc  extends Db{

}

每个数据库驱动必须要实现的方法包括(具体参数可以参考现有的数据库驱动类库):

驱动方法

方法说明

架构方法

__construct($config='')

数据库连接方法

connect($config='',$linkNum=0,$force=false)

释放查询方法

free()

查询操作方法

query($str)

执行操作方法

execute($str)

开启事务方法

startTrans()

事务提交方法

commit()

事务回滚方法

rollback()

获取查询数据方法

getAll()

获取字段信息方法

getFields($tableName)

获取数据库的表

getTables($dbName='')

关闭数据库方法

close()

获取错误信息方法

error()

SQL安全过滤方法

escapeString($str)

数据库的CURD接口方法(通常这些方法无需重新定义)

方法

说明

写入

insert($data,$options=array(),$replace=false)

更新

update($data,$options)

删除

delete($options=array())

查询

select($options=array())

介于不同数据库的查询方法存在区别,所以经常需要对查询的语句进行重新定义,这就需要修改针对查询的selectSql属性。该属性定义了当前数据库驱动的查询表达式,默认的定义是:

'SELECT%DISTINCT% %FIELD% FROM %TABLE%%JOIN%%WHERE%%GROUP%%HAVING%%ORDER%%LIMIT% %UNION%'

驱动可以更改或者删除个别查询定义,或者更改某个替换字符串的解析方法,这些方法包括:

方法名

说明

对应

parseTable

数据库表名解析

%TABLE%

parseWhere

数据库查询条件解析

%WHERE%

parseLimit

数据库查询Limit解析

%LIMIT%

parseJoin

数据库JOIN查询解析

%JOIN%

parseOrder

数据库查询排序解析

%ORDER%

parseGroup

数据库group查询解析

%GROUP%

parseHaving

数据库having解析

%HAVING%

parseDistinct

数据库distinct解析

%DISTINCT%

parseUnion

数据库union解析

%UNION%

parseField

数据库字段解析

%FIELD%

驱动的其他方法根据自身驱动需要和特性进行添加,例如,有些数据库的特殊性,需要覆盖父类Db类中的解析和过滤方法,包括:

parseKey

数据库字段名解析

parseValue

数据库字段值解析

parseSet

数据库set分析

parseLock

数据库锁机制

定义了驱动扩展后,需要使用的时候,设置相应的数据库类型即可:

'DB_TYPE'=>'odbc', // 数据库类型配置不区分大小写

 


NetPc