application
|-----libraries
|-----xxx_helper.php
system
|-----libraries
|-----url_helper.php
-----------------------------------------------------------------------------------------------------------------------------------------------------
一、什麼是框架?
二、框架的優缺點分析及爲什麼要選擇框架
三、主流MVC框架介紹:
1、thinkphp
2、zendframework
3、ci
4、yii
四、CI框架特性介紹:
1、輕量級:核心系統的類庫非常小
2、採用了最流行的MVC架構模式
3、生成乾淨的對搜索引擎友好化的url
http://www.kuxiu.net/index.php/common/login/
4、功能非常強大:
擁有全範圍的類庫,可完成一個項目的大多數通用功能,包括: 讀取數據庫、發送電子郵件、數據確認、保存 session 、對圖片的操作,以及支持 XML-RPC 數據傳輸等
5、不需要模板引擎:
雖然CI框架自帶了一個可選的模板解析器程序,但不要求你必須使用模板;
雖然模板引擎的代碼比較清晰,但這會帶來一個性能問題,因爲僞代碼要先被轉換成PHP才能運行。我們的目標是性能最大化, 所以我們選擇不使用專用的模板引擎。
當然,我們也可以使用ci框架自帶的模板引擎,也可以整合第三方的模板引擎到ci框架中:smarty模板引擎
6、中文化的文檔全面:
雖然是一款國外的框架,但是中文化的文檔也是非常全面,便於我們查閱
五、MVC模式:
視圖、
模型:
控制器
六、CI框架執行流程深入分析:
第一步:入口文件:
//加載引導文件,http://www.kuxiu.net/system/core/CodeIgniter.php文件
require_once BASEPATH.'core/CodeIgniter.php';
第二步:require_once BASEPATH.'core/CodeIgniter.php';中
//加載公共的函數庫
require(BASEPATH.'core/Common.php');
require(APPPATH.'config/constants.php');//常量文件
/*
配置類,加載配置文件時使用,如:
$this->config->load();
$this->config->item();
$this->config->set_item();
*/
$CFG =& load_class('Config', 'core');
$URI =& load_class('URI', 'core');
$RTR =& load_class('Router', 'core');
$OUT =& load_class('Output', 'core');
$SEC =& load_class('Security', 'core');
$IN =& load_class('Input', 'core');
require BASEPATH.'core/Controller.php';//系統基類控制器文件
return CI_Controller::get_instance();
//在擴展系統基控制器時使用:MY_Controller.php
if (file_exists(APPPATH.'core/'.$CFG->config['subclass_prefix'].'Controller.php')){
require APPPATH.'core/'.$CFG->config['subclass_prefix'].'Controller.php';//如:MY_Controller.php
}
$class = $RTR->fetch_class();//當前請求的控制器,如:common
$method = $RTR->fetch_method();//當前請求的控制器中的方法,如:index
$CI = new $class();//實例化當前請求的控制器類對象
關於hook的資料:就是在系統引導流程中插入自己的代碼,而不用修改核心代碼
貌似可以在 控制器之前(或者其他時候) 執行自己的代碼,執行某個對象的方法或者某個函數。我現在把需要在所有控制器中都執行的代碼移到hook中了。應該就是這麼用的吧?
雖然很神,但是實際上運用hook的情況不多(因爲ci已經解決了大部分你可能會遇到的問題)。當使用擴展無法達到目的時,纔會考慮鉤子。
hook在你執行controller之前執行,舉一個例子吧,有一次,項目要上線,但是服務器時間怎麼調也不正確。(因爲要存訂單時間),沒辦法,一時調不好服務器,就寫了一個鉤子設置時區。(只是作爲臨時方案)
1、index.php 作爲前端控制器,初始化運行 CodeIgniter 所需要的基本資源。
2、Router 檢查 HTTP 請求,以確定誰來處理請求。
3、如果緩存(Cache)文件存在,它將繞過通常的系統執行順序,被直接發送給瀏覽器。
4、安全(Security)。應用程序控制器(Application Controller)裝載之前,HTTP 請求和任何用戶提交的數據將被過濾。
5、控制器(Controller)裝載模型、核心庫、輔助函數,以及任何處理特定請求所需的其它資源。
6、最終視圖(View)渲染髮送到 Web 瀏覽器中的內容。如果開啓緩存(Caching),視圖首先被緩存,所以將可用於以後的請求。
七、URL調度模式:
1、如何修改默認執行的控制器和方法:
application/config/routes.php中配置如下項:
$route['default_controller'] = "common";//默認執行的控制器
八、model詳解:
1、模型類的命名規範:主需要首字母大寫即可,建議採用 User_model 形式
2、引用模型的兩種方式:
$this->load->model("user_model");//引用user_model模型
$this->load->model("User_model");//應用user_model模型,這兩種方式是等價的
九、實例化模型的執行流程:
$this->load->model("user_model");//引用user_model模型
十、CI框架中session與cookie類庫的使用:cookie登陸、session登陸
十一、CI框架中文件處理類庫及圖像處理類庫的使用:文件上傳、縮略圖、水印功能
十二、CI框架與smarty模板引擎的無縫整合:在項目中的應用
提示:雖然模板引擎的代碼比較清晰,但這會帶來一個性能問題,因爲僞代碼要先被轉換成PHP才能運行。我們的目標是性能最大化, 所以我們選擇不使用專用的模板引擎
十三、CI框架與UEditor編輯器的無縫整合:在項目中的應用(路徑問題)
十四、CI框架與報表類庫的無縫整合:在項目中的應用(報表的導入導出)
十五、導入機制和配置文件加載流程介紹
十六、配置文件:
1、主配置文件:application/config/config.php,已自動加載,無需手動啓用
分析:配置項目被存儲在一個叫$config[]的數組裏面,你可以添加自己的配置項目到這個文件中
2、加載單個自定義的配置文件:
$this->config->load("thumb_settings");//配置文件的文件名,不帶.php擴展名
3、加載多個自定義配置文件:
如果需要加載多個自定義配置文件,一般情況下他們會被合併爲一個數組;如果在不同的配置文件中存在同名的索引,那麼將會發生衝突;爲了避免這個問題,你可以將第二個參數設置爲true、這樣可以使每個配置文件中的內容存儲在一個單獨的數組中,數組的索引就是配置文件的名稱
$this->config->load("thumb_settings",true);
//相當於如下方式:
$this->config['thumb_settings'] = $thumb_settings;
//參數3用來屏蔽當配置文件不存在時產生的錯誤信息
$this->config->load("thumb_settings",false,true);
4、如何獲取配置文件中的配置項:
//加載配置文件:
$this->config->load("thumb_settings");//縮略圖相關的配置文件
//當視圖獲取的配置項不存在時,將返回false
$this->config->item("config_thumb");//縮略圖的相關配置項
5、如何動態設置一個配置項:
//動態設置生成的縮略圖的名字
$this->config->set_item("new_image",time.().$this->file_ext);
6、思考一個問題:配置項是否可以爲數組呢?
7、配置類輔助函數:
$this->config->site_url();//網站URL
如何將url路徑中的index.php屏蔽?
$config['index_page'] = 'index.php';//如:http://www.kuxiu.net/index.php/
$config['index_page'] = '';//如:http://www.kuxiu.net/
$this->config->base_url();//返回站點的根目錄
提示:在生成images、css、js等的url時非常實用
$this->config->system_url();//該函數用來得到system文件夾的url
十七、分頁類的使用:
//加載分類類庫
$this->load->pagination("pagination");
十八、數據庫的增刪改查:
普通查詢:
1、$this->db->database();//加載數據庫實例化對象
2、$query=$this->db->query($sql);//執行查詢,返回結果集;注意:query是普通數據庫操作類中的方法,快捷操作類繼承自普通數據庫操作類,所以快捷操作類中也有query方法,query方法返回一個結果集對象
3、$object_array=$query->result();//返回一個對象數組;result是結果集類中的方法
foreach($object_array as $object){
echo $object->name;
}
4、$data_array=$query->result_array();//返回一個二維關聯數組;result_array()是結果集類中的方法,主要用來將結果集轉換爲二維關聯數組
foreach($data_array as $row){
echo $row['name'];
}
5、$object=$query->row();//返回一個對象;
6、$row=$query->row_array();//返回一維數組
7、$query->num_rows();//返回查詢到的記錄數
8、$this->db->affected_rows(); //返回受影響的記錄數
9、$this->db->insert_id();//返回最新插入記錄的id
快捷查詢:
插入數據:
$this->db->insert("user",$data);
分析:參數1:表名,不帶前綴,因爲在配置文件中設置過數據表的前綴了
參數2:包含數據的關聯數組
缺點:$data關聯數組中的鍵名要與user表中字段名一一對應,缺一不可
注意:$this->db->insert_batch();
更新數據:
$this->db->update("user",$data,條件);
分析:參數1:表名,同上
參數2:包含數據的關聯數組
參數3:更新條件,有兩種形式:
數組形式:array("id"=>4)
鍵值對形式:"id=4"
刪除數據:
$this->db->delete("user",條件);//條件同上
查詢數據:
$query=$this->db->get();//返回結果集
//參數2:每頁記錄數 參數3:開始位置;
$query=$this->db->get("user",$pagesize,$limit);
$data_array=$query->result_array();//將結果集轉化爲數組
$this->db->get_where("user",$where,$limit,$pagesize);//查詢結果集,條件同上
//在執行查詢之前,我們可以隨意設置查詢的字段及條件
$this->db->select("username,realname,password");//字段間以逗號相隔
$this->db->select_max("id");//查詢最大id
$this->db->select_min("id");//查詢最小id
$this->db->select_avg("score");//平均值
$this->db->select_sum("score");//總值
//主要用來設置表名,如果使用了此函數,在$this->db->get();函數中就無需表名了
$this->db->from("user");
$this->db->where();//傳遞給本函數的所有值都會被自動轉義,以便生成安全的查詢
條件形式:
簡單的鍵值對:
$this->db->where('name', $name);
自定義鍵值對:
$this->db->where('name !=', $name);
$this->db->where('id <', $id);
關聯數組:
$where=array("username"=>$username,"password"=>$password)
字符串格式:
$where = "name='Joe' AND status='boss' OR status='active'";
$this->db->where($where);
注意:條件中可以包含運算符
$this->db->or_where();
$this->db->where_in();
$this->db->or_where_in();
$this->db->where_not_in();
$this->db->or_where_not_in();
$this->db->group_by();
$this->db->distinct();
$this->db->having();
$this->db->order_by();
$this->db->limit(10);
$this->db->count_all_results("user");
分析:此函數允許你獲得某個特定的Active Record查詢所返回的結果數量。可以使用Active Record限制函數,例如 where(), or_where(), like(), or_like() 等等。範例:
$this->db->set();//它可以用來代替那種直接傳遞數組給插入和更新函數的方式
案例:
$this->db->set('name', $name);
$this->db->insert('mytable'); //生成: INSERT INTO mytable (name) VALUES ('{$name}')
$this->db->empty_table();
$this->db->truncate();
鏈式查詢:鏈式方法允許你以連接多個函數的方式簡化你的語法
$this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20);
$query = $this->db->get();
十九、輔助函數的加載:
//單個輔助函數文件的加載
$this->load->helper("url");//輔助函數文件的名字
//多個輔助函數文件的加載
$this->load->helper(array(
"url",
"pagination",
"image_lib"
));
//一旦你載入了想要用到輔助函數文件,可以用標準的函數調用方法來使用裏面的函數。
base_url();// $this->base_url()是錯誤的寫法
1、如何擴展系統原有的helper函數庫?
在application/helpers/ 文件夾下建立一個文件,命名爲:MY_原系統函數庫名.php
2、如何設置默認擴展文件名的前綴?
找到application/config/config.php配置文件
修改$config['subclass_prefix'] = 'MY_';即可
3、如何修改數據表的前綴?
找到application/config/database.php配置文件
修改$db['default']['dbprefix'] = 'gt_';//數據表的前綴
二十、如何設置url路由及url後綴
$config['uri_protocol'] = 'AUTO';//路由形式,如:http://www.kuxiu.net/common/index/1/
$config['uri_protocol'] = 'PATH_INFO';//路由形式,如:http://www.kuxiu.net/common/index?x=a&y=b
$config['url_suffix'] = '';//url後綴,如:http://www.kuxiu.net/common/index.html
二十一、總結:
1、關於縮略圖的配置項目可以放在config.php文件中
2、$this->db->insert("user",$data);//要求數據表中除主鍵字段外,其它字段在$data關聯數組中都有默認值才能執行成功,提示:$data一般爲一維關聯數組
$this->db->insert_batch("user",$data);//$data一般爲二維關聯數組
3、跳轉:header("location:".site_url("common/login"));
4、設置時區
$config['time_zone']=date_default_timezone_set('Asia/shanghai');
5、推薦使用鏈式操作
$query=$this->db->query($sql);
$data_array=$query->result_array();
等價於:
$data_array=$this->db->query($sql)->result_array();
6、如何配置ueditor編輯器文件上傳的路徑,如:將圖片上傳到根目錄下面的 php/upload/ 下
首先:將ueditor/php/ 文件夾複製粘貼到根目錄下
然後:在模板文件中修改文件上傳路徑:
{literal}
<!--注意:js文件的引入必須在body體中,否則不生效-->
<script type="text/javascript" src="http://www.kuxiu.net/public/js/ueditor/editor_config.js"></script>
<script type="text/javascript" src="http://www.kuxiu.net/public/js/ueditor/editor_all.js"></script>
<script type="text/javascript">
var ue = new UE.ui.Editor({
initialFrameWidth:750,//編輯器初始化寬度
initialContent:'',//編輯器初始化內容
imagePath:"/php/",//圖片上傳路徑,默認情況下圖片上傳路徑的upload文件夾與圖片上傳腳本同目錄,所以這樣配置生成如下效果:"/php/upload/"
imageUrl:"/php/imageUp.php"//圖片上傳腳本文件
}
);
ue.render('content')//給id爲content的textarea表單控件渲染一個編輯器
</script>
{/literal}
思考:默認情況下,編輯器是按照日期自動創建存儲的文件夾的,如何修改這一規律?
找到php/Upload.class.php文件中的getFolder()函數,修改如下:
/**
* 按照日期自動創建存儲文件夾
* @return string
*/
private function getFolder(){
$pathStr = $this->config[ "savePath" ];//保存路徑
if ( strrchr( $pathStr , "/" ) != "/" ) {//保存路徑必須以"/"結尾
$pathStr .= "/";
}
$pathStr .= date( "Ymd" );//年月日
if ( !file_exists( $pathStr ) ) {//如果目錄不存在
if ( !mkdir( $pathStr , 0777 , true ) ) {//層級創建目錄
return false;//創建失敗返回false
}
}
///return $pathStr;//創建成功返回路徑
}
7、系統加載類庫:core/Loader.php
如下函數都在此類庫中定義
$this->load->model("");
$this->load->library("");
$this->load->database("");
$this->load->helper("");
$this->config->load();
///////////////////////////////////////////////////////////////////////////////////////////
<?php
1、在講解文件所在目錄方面的問題時:
application
|-----core
|-----MY_Controller.php
system
|-----core
|-----Controller.php
思路:
一、目前在企業中使用比較多的框架有如下幾種:
1、zendframework框架:此框架由zend公司開發並負責維護,入門比較困難一點,但是據說功能很強悍,屬於一款偏重量級的MVC框架
2、Yii框架:又稱爲 "易框架",在外企使用居多
3、thinkphp框架:是國人開發的一款框架,由於它的註釋和使用文檔都是中文,所以很受國人的喜歡
4、codeigniter框架:簡稱CI框架,是國外一款流行的框架,跟前面的框架比較,ci框架是最輕量級的,也是最容易上手的
二、我們選擇這款框架來學習,主要有以下幾點原因:
1、ci是一個輕量級的框架,關於輕量級,可從兩方面來理解:
1、體積小,解壓後不到4M,zendframework解壓後60M左右
2、佔用資源少:ci應用程序在運行的時候,只是將正常運行所必須的幾個核心類庫載入到了內存中,其它類庫在請求的時候纔會加載,這樣就達到了資源的最小化,這跟那些需要很多資源的框架是不一樣的,有些框架在運行的時候,會將所有的類庫首先載入內存中,而不管這些類庫是否能夠用的到,如:cakephp
3、但是這個輕量級,並不影響它開發大型的web應用程序,爲什麼這麼說呢?
首先,它自身所提供的類庫,已經能夠幫助我們完成web應用程序中的大部分功能
再者,ci框架在整合第三方類庫方面也有獨到的優勢,幾乎不需要進行任何配置
2、整合第三方類庫簡單,幾乎不需要進行任何配置
3、不需要使用模板引擎技術
大家知道,php原生態的語法結構執行效率是最高的,因爲跟使用了模板引擎技術的程序相比較,它少了一個編譯的過程
三、下面,我們就來進行ci框架的安裝:
ci框架的安裝,我們只需要按照如下步驟進行操作就可以了
1、官網:http://www.codeigniter.com 去下載ci框架最新的版本,目前最新版本爲2.1.3
中文網站:http://www.codeigniter.org.cn
2、下載完畢後,解壓,並將其複製粘貼到程序的主目錄(d:/wamp/xmall/),然後再將其重命名爲"myshop",那麼"myshop" 就作爲ci項目名稱存在了
3、爲我們的ci項目搭建一個虛擬主機:
首先,找到httpd.conf配置文件,開啓虛擬主機的配置
然後,找到httpd-vhosts.conf配置文件,進行虛擬主機的配置
最後,找到hosts配置文件,爲我們的ci項目添加dns映射
4、在瀏覽器中輸入 http://www.myshop.com/index.php 回車,如能看到如下歡迎界面,則表示我們的ci項目安裝成功了
四、ci框架的目錄結構分析:
瞭解ci框架的目錄結構,有助於幫助我們快速建立起對ci框架的一個整體認識
打開"myshop"項目,有如下文件和目錄
使用協議說明文檔、英文版的用戶手冊,這兩項不是項目所必須的,可暫時將其刪除
myshop
|-----system 框架程序目錄
|-----core 框架的核心程序
|-----CodeIgniter.php 引導性文件
|-----Common.php 加載基類庫的公共函數
|-----Controller.php 基控制器類文件:CI_Controller
|-----Model.php 基模型類文件:CI_Model
|-----Config.php 配置類文件:CI_Config
|-----Input.php 輸入類文件:CI_Input
|-----Output.php 輸出類文件:CI_Output
|-----URL.php URL類文件:CI_URl
|-----Router.php 路由類文件:CI_Router
|-----Loader.php 加載類文件:CI_Loader
|-----helpers 輔助函數
|-----url_helper.php url相關的輔助函數,如:創建url的輔助函數
|-----captcha_helper.php創建圖形驗證碼的輔助函數
|-----libraries 通用類庫
|-----Pagination.php 通用分頁類庫
|-----Upload.php 通用文件上傳類庫
|-----Image_lib.php 通用圖像處理類庫
|-----Session.php 通用session類庫
|-----language 語言包
|-----database 數據庫操作相關的程序
|-----DB_active_rec.php 快捷操作類文件(ActiveRecord)
|-----fonts 字庫
|-----application 項目目錄
|-----core 項目的核心程序
|-----helpers 項目的輔助函數
|-----libraries 通用類庫
|-----language 語言包
|-----config 項目相關的配置
|-----config.php 項目相關的配置文件
|-----database.php 數據庫相關的配置文件
|-----autoload.php 設置自動加載類庫的配置文件
|-----constants.php 常量配置文件
|-----routes.php 路由配置文件
|-----controllers 控制器目錄
|-----welcome.php 控制器文件,繼承CI_Controller
|-----models 模型目錄
|-----welcome_model.php 模型文件,繼承CI_Model
|-----views 視圖目錄
|-----welcome.php 視圖模板文件,默認後綴名爲.php
|-----cache 存放數據或模板的緩存文件
|-----errors 錯誤提示模板
|-----hooks 鉤子,在不修改系統核心文件的基礎上擴展系統功能
|-----third_party 第三方庫
|-----logs 日誌
|-----index.php 入口文件
五、ci框架中的url路由規則:
瀏覽器中輸入 http://www.myshop.com/index.php/welcome/index/ 回車時,默認情況下會找到
application
|-----controllers
|-----welcome.php 控制器文件,並執行其中的index方法
|-----admin 子目錄
|-----category.php 控制器文件
到底是不是呢?我們打開welcome.php控制器文件,並在index方法中添加一些代碼,運行輸出,證明確實如我們所料
我們可以將瀏覽器中的url歸納如下:http://域名/入口文件/控制器/方法/參數列表
當輸入網址回車時,默認情況下會直接從controllers目錄下尋找控制器文件,
如果我們的控制器文件放在controllers目錄下的子目錄中,又該如何訪問呢?
例如:在controllers目錄建立一個admin子目錄,然後呢,在admin子目錄下創建一個category.php控制器文件
那麼,我們在訪問category.php控制器文件中的addcategory方法時,在瀏覽器中怎樣訪問呢?
我們可以這樣來訪問:
http://www.myshop.com/index.php/admin/category/addcategory/
即:http://域名/入口文件/controllers下的子目錄/控制器/方法/參數列表
我們在瀏覽器中輸入http://www.myshop.com/index.php 後面沒有跟 "控制器/方法/參數列表" 回車時,默認情況下也會執行welcome.php控制器中的index方法。
這是因爲ci框架爲我們指定了一個默認的控制器和方法
默認控制器的設置在 "application/config/routes.php" 配置文件中進行設置的,我們可以重新設置默認的控制器
六、項目的部署:我們在實際部署大型項目時,還可以建立一些子目錄及文件來幫助我們更好的管理我們的項目
1、子目錄及入口文件的創建
controllers
|-----admin 後臺控制器
|-----home 前臺控制器
models
|-----admin 後臺模型文件
|-----home 前臺模型文件
views
|-----admin 後臺模板文件
|-----category 後臺商品分類模塊相關的模板文件
|-----addcategory.html
|-----public 後臺公共模板文件
|-----top.html
|-----left.html
|-----footer.html
|-----home 前臺模板文件
core
|-----MY_Controller.php 擴展後的控制器文件,繼承CI_Controller
public 素材文件
|-----images images文件
|-----admin 後臺images文件
|-----home 前臺images文件
|-----css css文件
|-----admin 後臺css文件
|-----home 前臺css文件
|-----js js文件
|-----admin 後臺js文件
|-----home 前臺js文件
uploads 上傳附件
admin.php 後臺入口文件:訪問後臺控制器,都必須經過admin.php入口
index.php 前臺入口文件:訪問前臺控制器,都必須經過index.php入口
2、將後臺模板文件及素材文件部署到我們的ci項目中來
css文件中採用絕對路徑
模板文件中採用絕對路徑
3、建立後臺控制器文件:
application
|-----controllers
|-----admin
|-----index.php index.php控制器文件
|-----user.php 用戶控制器文件
控制器的命名規範
$this->load->view("admin/index.html");//將後臺模板文件顯示出來
4、將前後臺素材文件的路徑寫到常量文件中:application/config/constants.php
define("IMG_PATH","http://www.myshop.com/public/images/"); //images路徑
define("CSS_PATH","http://www.myshop.com/public/css/"); //css路徑
define("JS_PATH","http://www.myshop.com/public/js/"); //js路徑
直接在控制器中獲取常量的值:
$data['img_path']=IMG_PATH;
$data['css_path']=CSS_PATH;
$data['js_path']=JS_PATH;
將$data數組傳遞給模板文件:
$this->load->view("admin/index.html",$data);//參數2:關聯數組
5、也可以將素材文件的路徑放到application/config/config.php配置文件中
$config['img_path']="http://www.myshop.com/public/images/";
$config['js_path']="http://www.myshop.com/public/css/";
$config['js_path']="http://www.myshop.com/public/js/";
在控制器中獲取application/config/config.php配置文件中的配置項:
$data['img_path']=$this->config->item("img_path");
$data['css_path']=$this->config->item("css_path");
$data['js_path']=$this->config->item("js_path");
將$data數組傳遞給模板文件
$this->load->view("admin/index.html",$data);//參數2:關聯數組
6、建立後臺模型文件:
application
|-----models
|-----admin
|-----user_model.php 用戶模型文件
模型文件的命名規範
如何在控制器中調用模型文件:
//1、實例化後臺的user_model類對象,對象名稱爲user_model
//2、將user_model實例化對象作爲控制器的user_model屬性
//3、因此,我們可以在控制器中通過 $this->user_model 來獲取user_model類對象,繼而可以調用對象中的方法
$this->load->model("admin/user_model");
$this->user_model->adduser();
7、數據庫操作:
數據表的創建:gt_users 導入一些數據
查詢用戶:首先在model中連接數據庫,$this->load->database();然後我們可以在模型類的方法中查詢所有的數據
在ci框架中操作數據庫可分爲兩種方式
(1)方式一:普通查詢:通過sql語句及db類的query()方法來完成,如下所示:
下面,我們先通過第一種方式來完成用戶管理系統
//insert、delete、update操作返回布爾true或false
//select操作成功時返回結果集對象,失敗時返回布爾值false
$query=$this->db->query($sql);
//通過結果集對象的方法將結果集轉化爲數據或對象
$data_array=$query->result_array();//將結果集轉換爲二維關聯數組
$row_array=$query->row_array();//將結果集轉換爲一維關聯數組
//獲取查詢到的行數
$num=$query->num_rows();
//db類中insert_id():返回最後一次插入數據的id
$id=$this->db->insert_id();
//分頁類庫的載入:
$this->load->library("pagination");//載入system/libraries/pagination.php分頁類庫
//分頁配置:
$config['base_url']="http://www.myshop.com/index.php/user/userlist/";
$config['total_rows']=200;//總記錄數,可從數據庫獲取
$config['per_page']=10;//每頁顯示的記錄數
$config['...']="...";//其他配置
//初始化配置,使得分頁配置生效
$this->pagination->initialize($config);
//創建默認風格的分頁代碼
$pages=$this->pagination->create_links();//$content['pages']
//limit的值
$limit=($page-1)*$config['per_page'];
//注意:傳遞給模板文件的數據都必須放到關聯數組中,會將關聯數組中元素做爲變量
$this->load->view("login.html",$content);//相當於extract($content)
//將分頁配置信息放到application/config/pagination.php配置文件中
//載入pagination.php配置文件
$this->config->load("pagination");
//獲取配置選項
$per_page=$this->config->item("per_page");//每頁顯示的記錄數
鏈式操作:可採用鏈式操作
$data_array=$this->db->query($sql)->result_array();
$row_array=$this->db->query($sql)->row_array();
(2)方式二:快捷查詢:主要通過快捷操作類來進行數據庫操作(ActiveRecord)
什麼是快捷操作類:主要用來將sql語句的拼接放到類的方法中來完成。
下面,我們再使用第二種方式來完成用戶管理系統
//查詢操作
$this->db->get("users",10,20);//參數2:每頁顯示的記錄數 參數3:開始查詢位置
$this->db->get_where("users",array('id'=>1),10,20);//參數3:每頁顯示的記錄數
//案例1:在函數內部幫助我們自動拼接sql語句
$this->db->select("*");//1、返回一個db類實例化對象 2、將實例化對象作爲模型類的db屬性
$this->db->from("users");
$this->db->where("id",3);
$this->db->order_by("id","desc");
$this->db->get();
//案例2:
$this->db->select("*");
$this->db->where("id",3);
$this->db->order_by("id","desc");
$this->db->get("users");
$this->db->count_all_results();//獲取查詢到的總記錄數
//插入操作:
$this->db->insert("users",$data_array);//參數1:表名 參數2:關聯數組
//更新操作:
$this->db->update("users",$data_array,$where);//參數1:表名 參數3:關聯數組
//刪除操作:
$this->db->delete("users",$where);//參數1:表名 參數2:關聯數組
//關於$where條件分析:
單條件時:使用鍵值對形式的條件
做比較時:使用運算符格式的條件
多條件時:使用關聯數組的格式
鏈式操作:
//將結果集轉化爲二維關聯數組
$data_array=$this->db->select('title')->from('mytable')->where('id', $id)->limit($limit, $pagesize)->get()->result_array();
//將結果集轉化爲一維關聯數組
$row_array=$this->db->select('title')->from('mytable')->where('id', $id)->get()->row_array();
?>