要使用CI中的資料庫操作,首先我們應該在CI的 application/config/databass.php 文件中配置資料庫信息,通常就是配置主機名,用戶名,密碼,資料庫名,表首碼(dbprefix); CI提供了一個database的類,但是並不預設裝載,需要手動載入;$this -> loa ...
要使用CI中的資料庫操作,首先我們應該在CI的 application/config/databass.php 文件中配置資料庫信息,通常就是配置主機名,用戶名,密碼,資料庫名,表首碼(dbprefix);
CI提供了一個database的類,但是並不預設裝載,需要手動載入;$this -> load ->database() ;也可以在application/config/autoload.php中的 $autoload['libraries'] = array( 'database' ) 配置資料庫的自動載入,配置完之後就不需要每次使用db類都載入batabase;
裝載成功後會放入到超級對象的屬性中;使用$this -> db 對象操作資料庫;
關於數據的查詢;
$sql = "select * from 表名";先創建一條SQL語句;
$res = $this -> db -> query( $sql ); CI當中使用資料庫預設返回的是一個對象,而不是資源;等價於mysql_fetch_object();
$user = $res -> result();使用對象中的result方法取出資源;可以在任意頁面使用$res -> result();命令返回資源,返回的資源是以數組的形式返回的,數組裡面是一個一個的對象;
也可以將返回的數組保存在一個變數中 $data[ ' user_list ' ] = $users 通過 $this -> load -> view( ' xxx/xxx.php ',$data ) 來將數據傳輸;
$user = $res -> resut_array() ;如果不希望返回的是對象,這條命令是將資源以二維數組(裡面是關聯數組)的形式返回;
$res -> row();以對象的形式返回第一條數據;(做用戶登陸查詢判定時可用);
具體的參數可以在CI的官方手冊中查閱;
當有資源需要操作多個資料庫時,可以在CI的 application/config/databass.php 文件中拷貝一份 { defualt } 參數配置資料庫並修改這個參數,之後在$this -> load -> database( 參數名 ) 裝載資料庫時帶上修改後的參數;
關於數據的添加/刪除/修改(例子寫的是添加,刪除和修改只需要更換sql語句即可);
首先需要載入資料庫類 $this -> load ->database;
$sql = " insert into 表名 (欄位,欄位) value (‘ 值 ’,‘ 值 ’) " ;創建一條SQL語句;
$this -> db -> query($sql);和mysql操作相似,不管什麼查詢都是用query建立;
if($bool){ //通常我們插入參數之後會列印出一個受影響行數和自增ID;
echo $this -> db -> affected rows(); //這條語句列印出受影響行數;等價於mysql_affected_rows();
echo $this -> db -> insert_id(); //這條語句列印出自增ID;等價於mysql_insert_id();
}
關於提交數據來操作資料庫安全性的問題;
通常我們從表單得到一個欄位並連接資料庫查詢時(大部分使用查詢時使用,增刪改會調用AR操作來解決安全性的問題),可以通過以下方式增加安全性;
$data=array(
$data = $this -> input -> post("xxx");
$data = $this -> input -> post("xxx");
);
$sql = " select * from 表名 where 欄位= ? , 欄位 = ? ";
$this -> db -> query( $sql , $data );
關於表首碼的問題;
在CI中處理表首碼的問題還是比較簡單的,在application/config/databass.php 文件中有一個[ ' swap_pre ' ] 參數,只需要在裡面寫死一個表首碼,所有的SQL語句的表首碼都寫死成[ ‘ swap_pre ’ ]這個參數,這個參數會自動的將自身替換成[ ' dbprefix ' ]的參數,當更換了資料庫或表時,我們則不需要在sql語句中一條條修改表首碼,只需要在配置文件中修改[ ' dbprefix ' ]這個表首碼,如圖所示;
AR連貫操作;
select id,name from tableName where id>=3 order by id desc limit 2,3;//這裡limit是跳過兩條查第三條數據;
上面是一條SQL查詢語句,用CI中的AR連貫操作是這樣寫的;
$res = $this -> db -> select( ' id,name ' )
->from( ‘ user ’ )
->where(‘id >=’ , 3) //這裡id >=,id與符號之間一定要有空格;
->limit( 3 , 2 ) //跳過第二條查第三條,在CI中limit是反過來的,應該寫成3,2而不是2,3;
->get();
$res -> result(); //最後是用result函數調用;
echo $this -> db -> last_query(); //查詢最後一次sql語句,最後echo出來會發現和傳統的sql語句是一樣的;
如果對安全性有需求,可以使用以下操作進行數據查詢;如果安全需求更高的話就使用上面我們提到的使用db裡面的query方法問號綁定查詢;