ci框架操作數據庫基本方法


授課過程中如果涉及到文件夾或目錄時,可使用縮進進行演示:

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();







?>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章