ThinkPHP3.0完全开发手册
数据库抽象层的设计是由抽象数据库类(Db)和数据库驱动类组成的,内置的数据库驱动是MySQL和MySQLi驱动类,官方的扩展还提供了MsSQL、PgSQL、Sqlite、Oracle、Ibase、Mongo以及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', // 数据库类型配置不区分大小写