默认的数据库驱动位于`Think\Db\Driver`命名空间下面,驱动类必须继承`Think\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', // 数据库类型配置不区分大小写 ~~~