Ecos 資料庫操作

zifengshaoyu6發表於2017-01-09

資料庫操作類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

事務回滾

 

相關文章