内置方法
&of_db::pool($key, $pool = null, $value = null)读取/设置连接池
参数使用
#读取运行连接信息(key为null) key : 固定null #创建连接池(pool为数组) key : 连接池名称 pool : 连接参数, 若key已创建过, 便不起作用, 与_of.db 配置结构相同 #读取连接池(pool为null) key : 连接池名称 #查询事务层次(pool为"level"), 每开启事务会加一, 完结事务会减一 key : 连接池名称 pool : 固定"level" #查询事务最终提交状态(pool为"state"), 当SQL执行失败, 状态自动改false key : 连接池名称 pool : 固定"state" val : 默认null=读取状态, false=强制最终回滚 #查询连接信息(pool为"info") key : 连接池名称 pool : 固定"info" #检查连接是否正常(pool为"ping") key : 连接池名称 pool : 固定"ping" val : 默认null=未连接返回false, true=初始化连接 #重命名指定连接池(pool为"rename") key : 连接池名称 pool : 固定"rename" val : 新连接池名, 若新名已存在, 则会替换 #克隆连接池(pool为"clone") key : 连接池名称 pool : 固定"clone" val : 新连接池名, 若名称已存在, 会将原连接改名唯一值 #关闭并删除指定连接池(pool为"clean") key : 连接池名称 pool : 固定"clean" val : 清理方式, 默认null=销毁连接池, 1=仅关闭连接
对应返回
#读取运行连接信息(key为null时) { 连接名称 : { "level" : 嵌套的层次, 数据库未连接为 0 "state" : 嵌套未回滚, 数据库未连接为 null "tzId" : 时区标识符, 数据库未连接为 '' }, ... } #创建连接池(pool为数组) $instList.连接池名.pool 结构 #读取连接池(pool为null) key有效返回$instList.连接池名.pool 结构, 否则报错 #查询事务层次(pool为"level") 不在事务中返回0, 一层事务返回1, ... #查询事务最终提交状态(pool为"state") 不在事务中null, 最终提交事务true, 反之false #查询连接信息(pool为"info") 数据库未连接为 null, 已连接返回 key为null 结构 #检查连接是否正常(pool为"ping") 连接正常返回true, 反之false #克隆连接池(pool为"clone") 若克隆名($val)已存在, 返回原连接改名的唯一值, 否则为null
-
&of_db::sql($sql, $key = 'default')执行sql语句,根据不同语句返回不同结果
sqlstring一条SQL语句keystring指定 框架配置['db'] 中的键或者 of_db::pool 设置的键<?php /** * 描述 : 执行sql语句,根据不同语句返回不同结果 * sql : 字符串 = 执行传入的sql * null = 开启事务, 支持嵌套事务 * true = 提交事务, * false = 回滚事务, 若子事务回滚,则父事务也回滚,而非Savepoint方式 * key : 连接池区分符, 默认=default * 返回 : * sql为字符串时 : 若SQL执行失败, 则所在的事务最终会回滚 * 存储类,返回三维数组 CALL * 查询类,返回二维数组 SELECT * 插入类,返回插入ID INSERT * 删改类,返回影响行数 UPDATE * sql为其它时 : 成功返回 true, 失败返回 false */ of_db::sql('SELECT 1 a'); //使用默认连接池查询SQL of_db::sql('SELECT 1 a', 'test'); //使用test连接池查询SQL of_db::sql('/*call*/SELECT 1 a;SELECT 2 b'); //使用CALL模式,返回三维数组
错误跟踪
框架配置 db.xxx.params.errorTrace 开关
/* * 错误跟踪(errorTrace)配置结构 : 数字=记录所有加锁SQL的前n条, 数组=[ * //默认n=0关闭, n>0记录前n条加锁SQL, n<0不记录SQL * 0, * //正则匹配加锁SQL, 针对性跟踪表有利于提升系统性能 * '@.@' * ] */
跟踪超时错误代码逻辑(需mysql >= 5.5 和 PROCESS权限)
/* * 锁超时被阻列表结构错误日志 : { * "requestId" : 请求被阻的连接ID * "lockInfo" : 阻塞信息结构 { * 被阻时间@阻塞ID : { * "rWait" : 被阻ID等待时间 * "bInfo" : 递归阻塞, 同阻塞结构 * }, ... * }, * "lockSqls" : 阻塞ID执行SQL { * 阻塞ID : 加锁的SQL清单, 最大数量由errorTrace配置控制 [ * 执行时间 > 执行SQL, * ... * ] * }, * "lockTrace" : 阻塞逻辑跟踪 { * 阻塞ID : 代码执行逻辑, * ... * } * } */ 以下日志说明 : 1. 连接"114"在"2020-09-05 13:37:21"被连接"112"阻塞了"9"秒 2. 连接"112"在"2020-09-05 13:37:10"被连接"110"阻塞了"8"秒 3. 连接"112"在"2020-09-05 13:37:20"被连接"111"阻塞了"10"秒 Array( [requestId] => 114 [lockInfo] => Array( [2020-09-05 13:37:21@112] => Array( [rWait] => 9 [bInfo] => Array( [2020-09-05 13:37:10@110] => Array( [rWait] => 8 ) [2020-09-05 13:37:20@111] => Array( [rWait] => 10 ) ) ) ) )
跟踪死锁错误代码逻辑(需mysql >= 5.0 和 PROCESS权限)
/* * 死锁冲突列表结构错误日志 : { * "requestId" : 当前回滚连接ID * "lockSqls" : 冲突ID执行SQL { * 冲突ID : 加锁的SQL清单, 最大数量由errorTrace配置控制 [ * 执行时间 > 执行SQL, * ... * ] * }, * "lockTrace" : 冲突逻辑跟踪 { * 冲突ID : 代码执行逻辑, * ... * }, * "lockLogs" : 死锁日志文本 * } */
接口对接
- 是通过不同方式连接不同数据的方案
- 对接文件存储在 OF_DIR . '/accy/db' 下
- 所有对接文件继承 of_db 类
- 对接文件可以调用 $this->params 获取连接参数
- 对接文件要实现以下方法