資料庫操作類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
事務回滾