数据库操作类base_db_connections(强烈不建议直接调用)

对于数据库的操作, 建议通过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内完成

DB_HOST

主数据库HOST

DB_USER

主数据库用户名

DB_PASSWD

主数据库密码

DB_NAME

主数据库库名

DB_SLAVE_HOST

从数据库HOST

DB_SLAVE_USER

从数据库用户名

DB_SLAVE_PASSWORD

从数据库密码

DB_SLAVE_NAME

从数据库库名

DB_PREFIX

表前缀, 默认为sdb_

DB_CHARSET

数据库编码, 默认为utf8

函数接口

exec

执行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
    )

query

exec的别名函数

select

对数据库表进行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
        )

    )

selectrow

返回单行数据

参数:
    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
    )

selectlimit

与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
        )
    )

getRows

通过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
        )

    )

count

统计表的数据行数

参数:
    $sql select sql语句
返回:
    integer 行数
代码:
    $num = kernel::database()->count('select * from sdb_ecbook_item');
返回值:
    3

quote

对准备入数据库表字段的数据做安全转义处理

参数:
    $string 字符串
返回:
    $string 转义后的字符串
代码:
    $aData = kernel::database()->quote('abc"ecos"ab=ab');
返回值:
    'abc\"ecos\"ab=ab'

lastinsertid

获取最后插入数据库的条目的id号

返回:
    integer 插入数据库的id号
kernel::database()->lastinsertid();

affect_row

获取之前mysql语句操作所影响的行数

返回:
	integer 如果成功返回影响的行数, 如果失败返回-1

errorinfo

返回之前mysql语句操作所产生的错误文本信息

返回:
	string 如果成功返回相应的错误信息, 否则返回空数组''

errorcode

返回之前mysql语句操作所产生的错误号

返回:
	string 如果成功返回相应的错误号, 否则返回空数组0

beginTransaction

开始事务

返回:
	bool|resource 如果成功返回mysql连接标识, 失败返回false

commit

事务提交

返回:
	bool 成功为true, 失败为false

rollBack

事务回滚