对于数据库的操作, 建议通过model进行处理,.在model的基类中对于数据库的操作会通过dbschema定义文件对操作的信息进行校验并作相关的转义. 如果有特殊需求无法通过model进行处理, 应用本类时请慎重.
本类不允许直接调用, 调用方式可见base_db_model
数据库集群支持 本类支持mysql主从数据库, 一主一从, 主数据库为读写, 从数据库只读. 规则 1. 通过exec进行处理的通过主数据库服务器 2. 在一次http请求过程中, 使用用select/selectrow/selectlimit/count函数时, 使用从数据库服务器进行处理. 但一旦使用事务, 系统将通过主数据库服务器处理所有数据, 而不再通过从数据库服务器 如果想支持一主多从, 需要在config.php中做一点小处理, 把每一台的从数据库服务器的信息放到一个数组中(包括 DB_SLAVE_HOST, DB_SLAVE_USER, DB_SLAVE_PASSWORD, DB_SLAVE_NAME), 然后从数组中按照一定算法随机取出一条数据, 然后依次进行define.
支持多库,
本类的配置在config/config.php内完成
主数据库HOST
主数据库用户名
主数据库密码
主数据库库名
从数据库HOST
从数据库用户名
从数据库密码
从数据库库名
表前缀, 默认为sdb_
数据库编码, 默认为utf8
执行sql语句
参数: string $sql 需要执行的sql语句 bool $skipModifiedMark 是否跳过对于操作表的缓存更新(不明者请勿修改默认值), 默认为false resource $db_lnk mysql连接标识, 默认为null. 如果设置为null, 系统会根据config.php的配置连接指定服务器的数据库生成 返回: array|false 如果执行成功返回数组array('$rs', '$sql'). $rs表示mysql连接标识, $sql代表经过安全处理的sql语句. 如果失败返回false
代码: $item = $this->app->model('item'); $rs = $item->db->exec("select * from sdb_ecbook_item"); 返回的的$rs Array( [rs] => Resource id #62 [sql] => select * from sdb_ecbook_item )
exec的别名函数
对数据库表进行select,执行sql语句(只要是正确的sql语句都能执行);
参数: string $sql 正确的sql语句 返回: array select语句返回数据集, 二维数组. 每行代表一列数据 null insert delete update语句 不管错误还是正确都什么都不返回,如果是正确则会执行
代码: $aData = kernel::database()->select('select * from sdb_ecbook_item'); 返回值: Array( [0] => Array( [item_id] => 0 [item_name] => ami [item_subject] => abcde ) [1] => Array( [item_id] => 1 [item_name] => 0642 [item_subject] => aaaa ) )
返回单行数据
参数: string $sql sql语句, 不需要包含limit子句 返回: array 返回表单行数据
代码: $item = $this->app->model('item'); $aData = $item->db->selectrow("select * from sdb_ecbook_item"); 返回的$aData Array( [item_id] => 0 [item_name] => ami [item_subject] => abcde )
与select函数差不多, 区别在于, 用selectlimit不必手拼limit
参数: string $sql select的sql语句 integer $limit 取几条数据, 默认为10. 如果$limit为-1, 则表示所有数据 integer $offset 偏移量是多少, 默认为0 返回: array 数据集, 二维数组. 每行代表一列数据
代码: $aData = kernel::database()->selectlimit('select * from sdb_ecbook_item',1,2); 返回值: Array( [0] => Array( [item_id] => 2 [item_name] => ww [item_subject] => fsdafasdf ) )
通过mysql结果集连接标识, 获取单/多行数据
参数: resource $rs mysql结果集连接标识 integer $rows 取几行数据 返回: array 多行数据集
代码: $db = kernel::database(); $rs = $db->exec('select * from sdb_ecbook_item'); $aData = $db->getRows($rs,2); 返回值: Array( [0] => Array( [item_id] => 0 [item_name] => ami [item_subject] => abcde ) [1] => Array( [item_id] => 1 [item_name] => 0642 [item_subject] => aaaa ) )
统计表的数据行数
参数: $sql select sql语句 返回: integer 行数
代码: $num = kernel::database()->count('select * from sdb_ecbook_item'); 返回值: 3
对准备入数据库表字段的数据做安全转义处理
参数: $string 字符串 返回: $string 转义后的字符串
代码: $aData = kernel::database()->quote('abc"ecos"ab=ab'); 返回值: 'abc\"ecos\"ab=ab'
获取最后插入数据库的条目的id号
返回: integer 插入数据库的id号
kernel::database()->lastinsertid();
获取之前mysql语句操作所影响的行数
返回: integer 如果成功返回影响的行数, 如果失败返回-1
返回之前mysql语句操作所产生的错误文本信息
返回: string 如果成功返回相应的错误信息, 否则返回空数组''
返回之前mysql语句操作所产生的错误号
返回: string 如果成功返回相应的错误号, 否则返回空数组0
开始事务
返回: bool|resource 如果成功返回mysql连接标识, 失败返回false
事务提交
返回: bool 成功为true, 失败为false
事务回滚