**【ci框架】精通CodeIgniter框架


http://blog.csdn.net/yanhui_wei/article/details/25803945

一、大綱

 

 

[php]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
 
  1. 1、codeigniter框架的授課內容安排  
  2. 2、codeigniter框架的簡介  
  3.   
  4.     |-----關於框架的概念  
  5.     |-----使用CI框架的好處  
  6.     |-----為什么選擇CI框架  
  7.       
  8.   
  9. 3、codeigniter框架的具體安裝步驟  
  10.   
  11.     |-----官網下載:http://www.codeigniter.com/  
  12.     |-----httpd.conf配置文件中rewrite重寫機制的開啟  
  13.     |-----httpd.conf配置文件虛擬主機的開啟  
  14.     |-----httpd-vhosts.conf配置文件中虛擬主機的配置  
  15.     |-----hosts文件中添加DNS映射  
  16.   
  17. 4、codeigniter框架的目錄結構分析  
  18.   
  19.     |-----框架目錄結構分析  
  20.     |-----項目部署  
  21.   
  22. 5、codeigniter框架中URL各部分的分析及簡單的工作原理:http://域名/入口文件/模塊名/控制器/方法/參數列表  
  23. 6、codeigniter框架詳細執行流程分析:如果沒有模塊文件夾的話,則為:http://域名/入口文件/控制器/方法/參數列表  
  24. 7、codeigniter框架中config.php配置文件的分析  
  25. 8、codeigniter框架中使用rewrite重寫機制隱藏index.php單一入口文件  
  26.   
  27. 9、codeigniter框架中控制器  
  28.   
  29.     |-----控制器的創建位置  
  30.     |-----控制器的命名規范  
  31.     |-----控制器文件的分目錄管理  
  32.     |-----方法的命名規范:1、不能以list命名 2、方法名與類名不同名  
  33.     |-----方法中如何獲取GET方式提交過來的數據,如:$username = $this->input->get_post('username', true);//獲取post或get方式提交過來的數據  
  34.     |-----方法中如何獲取POST方式提交過來的數據,如:$username = $this->input->post('username', true);$username = $this->input->get_post('username', true);  
  35.       
  36. 10、codeigniter框架中視圖  
  37.   
  38.     |-----視圖的創建位置:appcation/views/ 目錄下  
  39.     |-----視圖的命名規范:login.php   login.html  
  40.     |-----如何在控制器中載入視圖模板文件:$this->load->view("login"); $this->load->view("login.html");  
  41.     |-----如何在控制器中給視圖模板文件傳遞數據:$this->load->view("login.html",$data);//extract函數  
  42.     |-----視圖模板文件的分目錄管理:$this->load->view("admin/category/addcategory.html");  
  43.   
  44. 11、codeigniter框架中的模型  
  45.   
  46.     |-----模型的創建位置:application/models 目錄下  
  47.     |-----模型的命名規范:不區分大小寫,建議首字母大寫  
  48.     |-----如何在控制器中載入模型(自動加載和手動加載):$this->load->model("user_model");  
  49.     |-----模型文件的分目錄管理:$this->load->model("admin/user_model");  
  50.   
  51. 12、codeigniter框架中如何擴展控制器、模型  
  52.   
  53.     |-----基控制器的擴展:class Common extends CI_Controller{}  
  54.     |-----基模型的擴展:class Model extends CI_Model{}  
  55.   
  56. 13、codeigniter框架中數據庫操作  
  57.   
  58.     |-----連接mysql數據庫的配置:application/config/database.php  
  59.     |-----如何在模型中連接mysql數據庫(自動載入和手動載入):$this->load->database();  
  60.     |-----使用普通查詢操作完整數據的增刪改查操作:1、$this->db->query($query);//結果集  
  61.     |-----使用快捷操作類完成數據的增刪改查操作:將sql語句的拼接放在成員方法中進行  
  62.     |-----用戶管理系統-管理員的查詢  
  63.     |-----用戶管理系統-管理員的添加  
  64.     |-----用戶管理系統-管理員的修改  
  65.     |-----用戶管理系統-管理員的刪除  
  66.   
  67. 14、codeigniter框架中輔助函數  
  68.   
  69.     |-----輔助函數的位置:application/helpers 目錄 或 system/helpers 目錄  
  70.     |-----如何在控制器中載入輔助函數:$this->load->helper("url");//載入url_helper.php文件  
  71.     |-----自定義輔助函數  
  72.     |-----輔助函數的擴展  
  73.     |-----輔助函數的載入機制:首先考慮載入application/helpers 目錄下的文件,再考慮載入system/helpers 目錄下的文件  
  74.     |-----用戶管理系統-頁面的跳轉:header("location:".site_url("admin/login/"));//創建一個url,並跳轉  
  75.   
  76. 15、codeigniter框架中的配置文件  
  77.       
  78.     |-----配置文件的位置:application/config/ 目錄下  
  79.     |-----如何在CI項目的控制器中載入配置文件(手動載入和自動載入):$this->config->load("pagination");  
  80.     |-----如何自定義配置文件:application/config/pagination.php    配置項變量名必須是 $config['配置項']  
  81.     |-----配置文件中配置項的命名規范:$config['配置項']  
  82.     |-----如何動態給配置項設置值:$this->config->set_item("配置項","配置項值");  
  83.     |-----如何將分頁配置寫到配置文件中  
  84.     |-----如何將配置文件合並:$this->config->load("pagination",true);//參數2:true  
  85.   
  86. 16、codeigniter框架中的通用類庫  
  87.   
  88.     |-----通用類庫的位置:application/libraries/ 目錄 system/libraries/ 目錄  
  89.     |-----如何在ci項目的控制器中載入通用類庫:$this->load->library("upload");//文件上傳類庫的載入  
  90.     |-----通用類庫的載入機制:優先考慮載入application/libraries/ 目錄下類庫,其次考慮載入 system/libraries 目錄下類庫  
  91.     |-----分頁類庫的載入(定制分頁風格):$this->load->library("pagination");  
  92.     |-----用戶管理系統-管理員列表頁分頁功能的完成  
  93.   
  94. 17、codeigniter框架與smarty模板引擎的無縫整合  
  95.   
  96.     |-----如何將第三方類庫:smarty模板引擎整合到CI項目中來        
  97.   
  98.     |-----如何在控制器中載入smarty模板引擎:$this->load->library("tp");  
  99.   
  100. 18、codeigniter框架中完成用戶登錄系統  
  101.   
  102.     |-----用戶登錄系統-session類庫的使用  
  103.     |-----用戶登錄系統-cookie類庫的使用  
  104.     |-----用戶登錄系統-使用captache輔助函數完成圖像驗證碼的創建  
  105.     |-----用戶登錄系統-驗證碼原理  
  106.     |-----用戶登錄系統-session登錄  
  107.     |-----用戶登錄系統-cookie登錄  
  108.     |-----用戶登錄系統-增加公共操作控制器(擴展系統核心控制器類文件)  
  109.     |-----用戶登錄系統-cookie的三種使用方式  
  110.         |-----php原生態語法結構中設置cookie的函數  
  111.         |-----ci框架的cookie輔助函數  
  112.         |-----input類庫  
  113.   
  114. 19、codeigniter框架與ueditor編輯器的無縫整合  
  115.   
  116.     |-----整合步驟  
  117.   
  118. 20、codeigniter框架與fckeditor編輯器的無縫整合  
  119.   
  120.     |-----整合步驟  
  121.   
  122. 21、codeigniter框架中完成無限級分類下拉菜單  
  123.       
  124.     |-----無線遞歸方式完成(比較復雜一點,效率低,不推薦使用)  
  125.     |-----path方式完成(最為簡便的方式,幾行代碼就可搞定)  
  126.   
  127. 22、codeigniter框架中使用jquery完成省市區三級聯動功能  
  128.   
  129. 23、codeigniter框架中完成商品分類管理模塊  
  130.   
  131.     |-----商品分類管理模塊-添加商品分類  
  132.     |-----商品分類管理模塊-添加商品子分類  
  133.     |-----商品分類管理模塊-修改商品分類  
  134.     |-----商品分類管理模塊-商品分類列表  
  135.     |-----商品分類管理模塊-商品分類的刪除  
  136.     |-----商品分類管理模塊-商品分類排序  
  137.     |-----文件上傳類庫的使用  
  138.     |-----圖像處理類庫的使用  
  139.     |-----商品分類管理模塊-添加分類banner  
  140.     |-----如何將文件上傳和圖像處理的有關配置放到配置文件中  
  141.     |-----商品分類管理模塊-分類banner列表  
  142.     |-----商品分類管理模塊-編輯分類banner  
  143.     |-----商品分類管理模塊-banner的啟用和禁用  
  144.     |-----商品分類管理模塊-分類banner排序  
  145.   
  146. 24、codeigniter框架完成一個權限管理系統  
  147.   
  148.     |-----權限管理系統-數據表的創建  
  149.     |-----權限管理系統-業務分析  
  150.     |-----權限管理系統-操作權限管理  
  151.     |-----權限管理系統-添加操作權限  
  152.     |-----權限管理系統-修改操作權限  
  153.     |-----權限管理系統-刪除操作權限  
  154.   
  155.     |-----權限管理系統-模塊管理  
  156.     |-----權限管理系統-添加模塊  
  157.     |-----權限管理系統-修改模塊  
  158.     |-----權限管理系統-刪除模塊  
  159.   
  160.     |-----權限管理系統-角色管理  
  161.     |-----權限管理系統-添加角色並為角色設置權限  
  162.     |-----權限管理系統-為當前角色添加操作權限  
  163.     |-----權限管理系統-為當前角色刪除操作權限  
  164.     |-----權限管理系統-修改角色  
  165.     |-----權限管理系統-刪除角色  
  166.   
  167.     |-----權限管理系統-添加管理員的同時為管理員設置多個角色  
  168.     |-----權限管理系統-添加管理員角色  
  169.     |-----權限管理系統-修改管理員角色  
  170.     |-----權限管理系統-刪除管理員角色  
  171.     |-----權限管理系統-當前管理員角色列表  
  172.       
  173. 25、顯示最后一條查詢的sql語句:主要用於在連貫操作時,檢測拼接的sql語句是否正確   
  174.       
  175.     echo $this->db->last_query();//如:select * from pt_users where uid>10 order by datetime desc limit 0,10   

 

[php]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
 
  1. 26、CI_DB_pdo_driver PDO數據庫驅動類  
  2.   
  3.     $this->db->affected_rows();//影響記錄數,區分:$this->db->get("order_master")->num_rows();//獲取到的結果集行數  
  4.   
  5.     $this->db->count_all("order_master");//對於某個表不帶條件的查詢  
  6.   
  7.     $this->db->count_all_results();//快捷操作類方法,適用於帶條件的查詢  
  8.   
  9.     $this->db->insert_id();//新插入記錄的id  
  10.   
  11.     $this->db->trans_enabled = true;//開啟事務(默認是false,所以在使用事務前必須將其賦值為true)  
  12.   
  13.     $this->db->trans_begin();//開始事務  
  14.   
  15.     $this->db->trans_rollback();//事務回滾  
  16.   
  17.     $this->db->trans_commit();//提交事務  
  18.   
  19.     $this->db->trans_status();//事務狀態 true 或 false         CI_DB_driver驅動類中的方法  
[php]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
 
  1. 27、CI_DB_mysql_driver  mysql數據庫驅動類  
  2.   
  3.     $this->db->affected_rows();//影響記錄數,區分:$this->db->get("order_master")->num_rows();//獲取到的結果集行數  
  4.   
  5.     $this->db->count_all("order_master");//對於某個表不帶條件的查詢  
  6.   
  7.     $this->db->count_all_results();//快捷操作類方法,適用於帶條件的查詢  
  8.   
  9.     $this->db->insert_id();//新插入記錄的id  
  10.   
  11.     $this->db->trans_enabled = true;//開啟事務(默認是false,所以在使用事務前必須將其賦值為true)  
  12.   
  13.     $this->db->trans_begin();//開始事務  
  14.   
  15.     $this->db->trans_rollback();//事務回滾  
  16.   
  17.     $this->db->trans_commit();//提交事務  
  18.   
  19.     $this->db->trans_status();//事務狀態 true 或 false         CI_DB_driver驅動類中的方法  
[php]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
 
  1. 28、CI_DB_mysqli_driver  mysqli數據庫驅動類  
  2.   
  3.     $this->db->affected_rows();//影響記錄數,區分:$this->db->get("order_master")->num_rows();//獲取到的結果集行數  
  4.   
  5.     $this->db->count_all("order_master");//對於某個表不帶條件的查詢  
  6.   
  7.     $this->db->count_all_results();//快捷操作類方法,適用於帶條件的查詢  
  8.   
  9.     $this->db->insert_id();//新插入記錄的id  
  10.   
  11.     $this->db->trans_enabled = true;//開啟事務(默認是false,所以在使用事務前必須將其賦值為true)  
  12.   
  13.     $this->db->trans_begin();//開始事務  
  14.   
  15.     $this->db->trans_rollback();//事務回滾  
  16.   
  17.     $this->db->trans_commit();//提交事務  
  18.   
  19.     $this->db->trans_status();//事務狀態 true 或 false         CI_DB_driver驅動類中的方法  

 

[php]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
 
  1. 29、model模型類中引用其它model模型類(如:category_model)和數據庫(如:product)  
  2.   
  3.     public function __construct() {  
  4.         parent::__construct();  
  5.         $this->product_db = $this->load->database('product', true);//通過model基類中的__get()方法選擇性的引入CI超級對象中已加載類庫,如:"load"  
  6.         $this->load->model('category_model');  
  7.     }  
[php]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
 
  1. 30、控制器中引用其它模型類(如:category_model)和數據庫(如:product)  
  2.   
  3.     public function __construct() {  
  4.         parent::__construct();  
  5.         $this->product_db = $this->load->database('product', true);  
  6.         $this->load->model('category_model');  
  7.     }  
[php]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
 
  1. 31、helper函數中引用CI超級對象的方法  
  2.   
  3.     function get_order_status_by_order($order_status){  
  4.   
  5.         $CI =& get_instance();//獲取CI超級對象  
  6.   
  7.         $CI->load->Model('order_model');//通過CI超級對象可以載入任何模型  
  8.   
  9.     }  
[php]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
 
  1. 32、緩存驅動的加載方式  
  2.   
  3.     $this->load->driver('cache', array('adapter' => 'memcached'));//加載緩存驅動或緩存適配器,當前為memcached緩存;注意:CI框架只支持memcached,不支持memcache,windows操作系統下只有memcache擴展  
  4.   
  5.     $this->load->driver('cache', array('adapter' => 'file'));//加載緩存驅動或緩存適配器,當前為file緩存  
  6.   
  7.     $this->load->driver('cache', array('adapter' => 'redis'));//加載緩存驅動或緩存適配器,當前為redis緩存  
  8.   
  9.     $this->load->driver('cache', array('adapter' => 'apc', 'backup' => 'file'));//優先選擇apc緩存,file文件緩存作為替代方案;如果服務器不支持apc緩存時,選擇file文件緩存  
[php]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
 
  1. 33、靜態html模板文件中如何動態加載區域塊內容  
  2.   
  3.     //index.html文件  
  4.     <div include="/index.php/pub/common_nav" rel="include"></div>  
  5.   
  6.     //jquery代碼  
  7.     $(document).ready(function () {  
  8.         $('[rel=\'include\']').each(function (e) {  
  9.         var t = $(this),  
  10.         url = t.attr('include') + location.search;  
  11.         url && $.get(url, function (data) {//url:'/index.php/pub/common_nav'  
  12.             t.html(data);  
  13.         })  
  14.         })  
  15.     })  
[php]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
 
  1. 34、拼接insert sql語句  
  2.     /** 
  3.      *一維關聯數組,拼接sql語句 
  4.      *$data['username']="admin"; 
  5.      *$data['password']="12345"; 
  6.      *$data['sex']=""; 
  7.      */  
  8.     function add_user( $data ) {  
  9.             if ( empty($data) || !is_array($data) ) {  
  10.                 return false;  
  11.             }  
  12.             foreach ($data as $key => $value) {  
  13.                 if ( $value === '') {  
  14.                     unset($data[$key]);//刪除數組中值為空的元素  
  15.                 }  
  16.             }  
  17.             $cols = array_keys($data);//獲取數組所有的鍵名  
  18.             $values = array_values($data);//獲取數組所有的值  
  19.             $cols_str = implode(",", $cols);//將數組所有的鍵名拼接成一個字符串  
  20.             $values_str = "'".implode("','", $values)."'";//將數組所有的鍵值放到單引號中  
  21.             //拼接sql:INSERT INTO user (username,password) VALUES ('admin','12345');  
  22.             $sql = "INSERT INTO user ({$cols_str}) VALUES ({$values_str})";//拼接sql  
  23.             $this->db->query($sql);  
  24.     }  
[php]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
 
  1. 35、拼接insert sql語句  
  2.     /** 
  3.      *一維關聯數組,拼接sql語句 
  4.      *$data['username']="admin"; 
  5.      *$data['password']="12345"; 
  6.      *$data['sex']=""; 
  7.      */  
  8.     function add_user( $data ) {  
  9.             if ( empty($data) || !is_array($data) ) {  
  10.                 return false;  
  11.             }  
  12.             foreach ($data as $key => $value) {  
  13.                 if ( $value === '') {  
  14.                     unset($data[$key]);//刪除數組中值為空的元素  
  15.                 }  
  16.             }  
  17.             $cols = array_keys($data);//獲取數組所有的鍵名  
  18.             $values = array_values($data);//獲取數組所有的值  
  19.             foreach($values as $k=>$val){  
  20.                 $values[$k]="'".$val."'";//將所有的鍵值放到單引號中  
  21.             }  
  22.             $cols_str = implode(",", $cols);//將數組所有的鍵名拼接成一個字符串  
  23.             $values_str = implode(",", $values);//將數組所有的鍵值拼接成一個字符串  
  24.             //拼接sql:INSERT INTO user (username,password) VALUES ('admin','12345');  
  25.             $sql = "INSERT INTO user ({$cols_str}) VALUES ({$values_str})";//拼接sql  
  26.             $this->db->query($sql);  
  27.     }  
[php]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
 
  1. 36、拼接update sql語句  
  2.     /** 
  3.      * 編輯用戶信息 
  4.      * $userid=1; 
  5.      * $data['username']='admin'; 
  6.      * $data['password']='123'; 
  7.      */  
  8.     function edit_user(userid, $data) {  
  9.         if ( empty($data) || !is_array($data) ) {  
  10.             return;  
  11.         }  
  12.         foreach ($data as $key => $value) {  
  13.             $str .= isset($str)?", {$key} = '{$value}'":"{$key} = '{$value}'";  
  14.         }  
  15.         //拼接sql:UPDATE user SET username='admin',password='123' WHERE addr_id = '1';  
  16.         $sql = "UPDATE user SET {$str} WHERE addr_id = '{$addr_id}'";  
  17.         $this->db->query($sql);  
  18.     }  
[php]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
 
  1. 37、數據庫快捷操作類常用方法  
  2.     /** 
  3.      * 查詢訂單 
  4.      * 
  5.      * @param $query 
  6.     */  
  7.     public function get_order_list($query, $offset = 0, $limit = 20) {  
  8.         if (is_array($query) && !empty($query)) {  
  9.             foreach ($query as $key => $val) {  
  10.                 if (is_array($val)) {  
  11.                     $this->order_db->where_in($key, $val);  
  12.                 } else {  
  13.                     $this->order_db->where($key, $val);  
  14.                 }  
  15.             }  
  16.         }  
  17.         $this->order_db->order_by('updatetime', 'desc');  
  18.         $this->order_db->order_by('id', 'desc');  
  19.         if (!$limit) {  
  20.             $query = $this->order_db->get('order');  
  21.         } else {  
  22.             $query = $this->order_db->get('order', $limit, $offset);  
  23.         }  
  24.           
  25.         if ($query->num_rows() > 0) {  
  26.   
  27.             return $query->result_array();  
  28.         }  
  29.   
  30.         return array();  
  31.     }  
[php]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
 
  1. 38、拼接select sql語句  
  2.     function get_user_list($cols=array("username","password")) {  
  3.         $col=implode(",",$cols);//查詢的列屬性  
  4.         $sql = "SELECT $col FROM user ORDER BY addr_id DESC";  
  5.         $this->db->query($sql)->result_array();  
  6.     }  
[php]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
 
  1. 39、CI框架中cookie的三種使用方式  
  2.   
  3.     //第一種設置cookie的方式:采用php原生態的方法設置的cookie的值  
  4.     setcookie("user_id",$user_info['user_id'],86500);  
  5.     setcookie("username",$user_info['username'],86500);  
  6.     setcookie("password",$user_info['password'],86500);  
  7.     //echo $_COOKIE['username'];  
  8.   
  9.     //第二種設置cookie的方式:通過CI框架的input類庫設置cookie的值  
  10.     $this->input->set_cookie("username",$user_info['username'],60);  
  11.     $this->input->set_cookie("password",$user_info['password'],60);  
  12.     $this->input->set_cookie("user_id",$user_info['user_id'],60);  
  13.     //echo $this->input->cookie("password");//適用於控制器  
  14.     //echo $this->input->cookie("username");//適用於控制器  
  15.     //echo $_COOKIE['username'];//在模型類中可以通過這種方式獲取cookie值  
  16.     //echo $_COOKIE['password'];//在模型類中可以通過這種方式獲取cookie值  
  17.   
  18.     //第三種設置cookie的方式:通過CI框架的cookie_helper.php輔助函數庫設置cookie的值  
  19.     set_cookie("username",$user_info['username'],60);  
  20.     set_cookie("password",$user_info['password'],60);  
  21.     set_cookie("user_id",$user_info['user_id'],60);  
  22.     //echo get_cookie("username");  
[php]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
 
  1. 40、array_merge()合並數組函數的使用  
  2.     <?php  
  3.     header("content-type:text/html;charset='utf-8'");  
  4.     $arr1=array(  
  5.           
  6.         "13012"=>array(  
  7.             "brand_id"=>2,  
  8.             "category_id"=>3  
  9.         )  
  10.   
  11.     );  
  12.   
  13.     $arr2=array(  
  14.           
  15.         "13012"=>array(  
  16.             "goods_id"=>3576,  
  17.             "goods_name"=>"sanyang"  
  18.         )  
  19.   
  20.     );  
  21.     /** 
  22.      *echo "<pre>";print_r(array_merge($arr1,$arr2)); 
  23.      *結果: 
  24.      *Array 
  25.      *  ( 
  26.      *      [0] => Array //索引重置為數字索引 
  27.      *          ( 
  28.      *              [brand_id] => 2 
  29.      *              [category_id] => 3 
  30.      *          ) 
  31.      *      [1] => Array 
  32.      *          ( 
  33.      *              [goods_id] => 3576 
  34.      *              [goods_name] => sanyang 
  35.      *          ) 
  36.      *  ) 
  37.      */  
  38.   
  39.      /** 
  40.      *echo "<pre>";print_r(array_merge($arr1['13012'],$arr2['13012'])); 
  41.      *結果: 
  42.      *  Array 
  43.      *  ( 
  44.      *      [brand_id] => 2 
  45.      *      [category_id] => 3 
  46.      *      [goods_id] => 3576 
  47.      *      [goods_name] => sanyang 
  48.      *  )    
  49.      */  
  50.   
  51.     ?>  

 

[php]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
 
  1. 41.json格式數據:  
  2.        public function json(){  
  3.            $data[0]['goods_id']=3567;  
  4.            $data[0]['goods_name']="sanyang";  
  5.            $data[1]['goods_id']=3567;  
  6.            $data[1]['goods_name']="sanyang";  
  7.            echo json_encode($data);exit;  
  8.            /** 
  9.             * 結果: 
  10.             * [ 
  11.             *    { 
  12.             *        "goods_id": 3567, 
  13.             *        "goods_name": "sanyang" 
  14.             *    }, 
  15.             *    { 
  16.             *        "goods_id": 3567, 
  17.             *        "goods_name": "sanyang" 
  18.             *    } 
  19.             *] 
  20.             */  
  21.        }  

 

[php]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
 
  1. 42.聯合查詢 left join  
  2. //controller控制器  
  3. $query = array(  
  4.         'product_id' => $product_id,  
  5.         'activity.status' => array(1, 2, 0),  
  6.         'activity.is_del' => 0  
  7. );  
  8. $query['activity.activity_id<>'] = $activity_id;  
  9.   
  10. $goods_list = $this->activity_model->get_activity_good_mapping($query, 0, 0);  
  11.   
  12. //model模型  
  13. public function get_activity_good_mapping($query,$offset = 0, $limit = 0,$get=''){  
  14.         $this->db = $this->activity_db;  
  15.         if (is_array($query) && !empty($query)) {  
  16.             foreach ($query as $key => $val) {  
  17.                 if (is_array($val)) {  
  18.                     $this->db->where_in($key, $val);  
  19.                 } else {  
  20.                     $this->db->where($key, $val);  
  21.                 }  
  22.             }  
  23.         }  
  24.           
  25.         $this->db->from('activity_goods');  
  26.         $this->db->join('activity', 'activity_goods.activity_id = activity.activity_id','left');  
  27.           
  28.         if (!$limit) {  
  29.               
  30.         } else {  
  31.             $query = $this->db->limit($limit, $offset);  
  32.         }  
  33.         $query = $this->db->get();  
  34.         if ($query->num_rows() > 0) {  
  35.               
  36.             return $query->result_array();  
  37.         }  
  38.   
  39.         return array();  
  40. }  
[php]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
 
  1. 43.ci框架如何記錄sql日志?  
  2.   
  3. (1)配置日志目錄: 在"application/config/config.php" 文件中配置日志目錄  
  4.    $config['log_path']="/opt/www/logs/";  
  5. (2)在 "system/database/DB_driver.php" 文件的query()方法末尾添加如下語句:  
  6.    log_message( 'db','【sql語句:'.$this->last_query().'】');//這樣所有執行過的sql語句都會按日期時間格式記錄到 "/opt/www/logs/" 目錄下  
  7.    return $RES;  



 

二、部分截圖如下:

 

 

 

 

三、數據庫操作類之間的繼承關系(區分數據庫普通操作類和數據庫快捷操作類),如圖所示:

 

注意:CI_DB類是在DB()函數中動態定義的,沒有單獨的類庫文件

         DB()函數在DB.php文件中定義

         DB.php文件中部分代碼如下:

 

        

[php]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
 
  1. require_once(BASEPATH.'database/DB_driver.php');//類名:CI_DB_driver  
  2.   
  3. if ( ! isset($active_record) OR $active_record == TRUE)  
  4. {  
  5.     require_once(BASEPATH.'database/DB_active_rec.php');  
  6.   
  7.     if ( ! class_exists('CI_DB'))  
  8.     {  
  9.         eval('class CI_DB extends CI_DB_active_record { }');//繼承關系  
  10.     }  
  11. }  
  12. else  
  13. {  
  14.     if ( ! class_exists('CI_DB'))  
  15.     {  
  16.         eval('class CI_DB extends CI_DB_driver { }');//繼承關系  
  17.     }  
  18. }  
  19.   
  20. require_once(BASEPATH.'database/drivers/'.$params['dbdriver'].'/'.$params['dbdriver'].'_driver.php');//類名:CI_DB_mysql_driver  
  21.   
  22. // Instantiate the DB adapter  
  23. $driver = 'CI_DB_'.$params['dbdriver'].'_driver';//類名:"CI_DB_mysql_driver"  
  24. $DB = new $driver($params);//創建一個數據庫操作類句柄對象: $DB=new CI_DB_mysql_driver($paams); 繼承關系:class CI_DB_mysql_driver extends CI_DB{}  
  25.   
  26. if ($DB->autoinit == TRUE)  
  27. {  
  28.     $DB->initialize();  
  29. }  
  30.   
  31. if (isset($params['stricton']) && $params['stricton'] == TRUE)  
  32. {  
  33.     $DB->query('SET SESSION sql_mode="STRICT_ALL_TABLES"');  
  34. }  
  35.   
  36. return $DB;//返回數據庫操作類句柄對象  



 

 

     提示:$this->load->database();//內部通過加載DB.php文件並調用DB()函數來實現不同數據庫驅動類的加載

              $this->product_db = $this->load->database('product', true);//連接"product"數據庫,並返回數據庫操作類句柄,參數2-代表返回的數據庫句柄

              $this->wms_db = $this->load->database('wms', true);//連接"wms"數據庫,並返回數據庫操作類句柄,參數2-代表返回的數據庫句柄

              $this->order_db = $this->load->database('order', true);//連接"order"數據庫,並返回數據庫操作類句柄,參數2-代表返回的數據庫句柄

 

 

四、模型類分析:CI_Model

 

 

模型類分析:CI_Model

 

 

數據庫普通操作類(CI_DB_driver)中的query()方法內部,通過$driver= $this->load_rdriver(); $RES= new $driver();兩行代碼加載並實例化了一個CI_DB_mysql_result結果集對象(總結:以驅動的方式加載結果集對象),經過對結果集對象的一些列初始化操作,最終返回此結果集對象(總結:query()方法中返回了一個CI_DB_mysql_result結果集對象)

 

[php]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
 
  1. //CI_DB_driver 基類中的load_rdriver()方法在數據庫普通操作基類中的query()方法中被調用,用來返回一個結果集對象  
  2.  function load_rdriver(){  
  3.     $driver = 'CI_DB_'.$this->dbdriver.'_result';  
  4.   
  5.     if ( ! class_exists($driver))  
  6.     {  
  7.         include_once(BASEPATH.'database/DB_result.php');//類名:CI_DB_result  
  8.         include_once(BASEPATH.'database/drivers/'.$this->dbdriver.'/'.$this->dbdriver.'_result.php');//類名:CI_DB_mysql_result  
  9.     }  
  10.   
  11.     return $driver;//繼承關系:class CI_DB_mysql_result extends CI_DB_result  
  12. }  

           提示:也就是說,類似 $this->db->query("select * from user"); 的語句,返回的都是一個結果集對象

                    $this->db->query("select * from user")->result_array();//將結果集轉換為二維關聯數組

                    $this->db->query("select * from user")->row_array();//將結果集轉換為一維關聯數組

 

 

 

 

數據庫快捷操作類(CI_DB_active_record)中的get()、insert()等多個方法內部都調用了數據庫普通操作類中的query()方法,即:間接的返回了CI_DB_mysql_result結果集對象

數據庫快捷操作類中很多對結果集的操作函數內部都是通過封裝返回的CI_DB_mysql_result結果集對象中的方法來完成相似功能的(總結:get()、insert()方法內部最后調用了query()方法,並返回query()方法執行的結果,所以返回的也是一個CI_DB_mysql_result結果集對象)

數據庫快捷操作類中的方法其實只干了一件事情,那就是通過函數的方式幫助我們拼接了要執行的sql語句,並執行該sql語句

但是對於復雜的sql語句,尤其對於復雜的多表查詢語句,個人還是建議直接使用數據庫普通操作類中的query()方法(適用於兩個表以上的情況)

對於返回的結果集對象而言,結果集對象中的方法是通用的(總結:CI_DB_mysql_result結果集對象中對結果集的處理函數對於數據庫普通操作類和數據庫快捷操作類是通用的)

 

我們可以這樣理解:數據庫快捷操作類是對數據庫普通操作類的二次封裝

 

提示:數據庫操作類的繼承關系

class CI_DB_active_record extends CI_DB_driver {

//代碼

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM