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

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

一、大綱

?

?

[php]?view plaincopy在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 plaincopy在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 plaincopy在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 plaincopy在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 plaincopy在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 plaincopy在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 plaincopy在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 plaincopy在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 plaincopy在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 plaincopy在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 plaincopy在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 plaincopy在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 plaincopy在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 plaincopy在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 plaincopy在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 plaincopy在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 plaincopy在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 plaincopy在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 plaincopy在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 plaincopy在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 plaincopy在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 {

//代碼

}

轉載于:https://www.cnblogs.com/kenshinobiy/p/4779042.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/287768.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/287768.shtml
英文地址,請注明出處:http://en.pswp.cn/news/287768.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AspNetCore開源中間件-VueRouterHistory

前言用過VueRouter路由組件的應該都知道&#xff0c;VueRouter有hash和history兩種模式。hash模式會在url中插入#&#xff0c;history模式下url則看上去更加簡潔美觀。如果想要支持history模式則必須要后端服務進行配合。常用后端服務器配置方式請參考 后端配置例子后端配置例子…

T-SQL編程基礎之三:游標(Cursor)編程

SQL是一種面向集合操作的語言,大多情況下,一個SQL語句將會操作數據庫表里的很多數據,基本上,一個數據庫的程序員腦子里應該想的是如何整體操作一個表或者是幾個表。 但也有一些情況下,試圖整表操作是不現實的,需要一行一行處理數據,這種情況下,SQL語言提供了所謂游標的…

《假如編程是魔法之零基礎看得懂的Python入門教程 》——(一)既然你選擇了這系列教程那么我就要讓你聽得懂

一、前言 幾個月前編寫了一份python語言入門的博文&#xff0c;近期重新審閱了一遍發現編寫的質量太過隨意&#xff0c;可能對于一部分人并不是非常友好&#xff0c;故此重新編寫Python語言的零基礎教程。 本篇教程將會盡量把一些專業術語給讀者講解清楚&#xff0c;并且讓讀…

centos 7下安裝mysql_Centos7下安裝MySQL5.7(數據庫的最全安裝方法)

Centos7下使用yum安裝mysql數據庫首先Centox7已經不支持mysql&#xff0c;因為收費了你懂得&#xff0c;所以內部集成了mariadb&#xff0c;而安裝mysql的話會和mariadb的文件沖突&#xff0c;所以需要先卸載掉mariadb。由于確定使用mysql&#xff0c;那只有卸載mariadb了。一、…

環形隊列

在網上看到一篇比較好的介紹隊列的文章&#xff0c;地址為&#xff1a;http://www.cnblogs.com/kubixuesheng/p/4104802.html 特此感謝原創作者&#xff0c;以下均為摘抄。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1、…

HTTP1.0、HTTP1.1 、SPDY、HTTP2.0之演變過程和優化

一、協議的演變過程和時間 HTTP1.0(1996年) -> HTTP1.1(1999年) -> SPDY(2012年google提出了SPDY的方案) -> HTTP2.0(2013年8月進行首次合作共事性測試) 二、影響一個HTTP網絡請求的因素 主要有兩個:帶寬和延遲 1)帶寬:網絡基礎建設已經使得帶寬得到極大的提升…

OK335xS GPMC nand device register hacking

/********************************************************************************** OK335xS GPMC nand device register hacking* 說明&#xff1a;* 由于最近遇到No NAND device found這個內核錯誤&#xff0c;在網絡上也沒找到很好的* 解決辦法&am…

Blazor University (19)使用 RenderFragments 模板化組件 —— 數據傳遞

原文鏈接&#xff1a;https://blazor-university.com/templating-components-with-renderfragements/passing-data-to-a-renderfragement/將數據傳遞給 RenderFragment源代碼[1]到目前為止&#xff0c;我們使用了僅包含子標記的 RenderFragments&#xff0c;然后在渲染組件時按…

一頭扎進Node(三) - File System

file.open:異步模式打開文件 fs.open(path, flags[, mode], callback) 案例代碼如下&#xff1a; var fs require(fs);/*** 參數說明&#xff1a;* 1.path&#xff1a;要打開的文件的文件路徑* 2.flags&#xff1a;打開文件的方式 讀/寫* r&#xff1a;只讀方式打開文件…

《零基礎看得懂的C語言入門教程 》——(十二)原來結構體是這么回事

一、學習目標 了解C語言的結構體的使用方法了解C語言結構體的結構的賦值了解多種C語言結構體變量的賦值方法和取值方法 目錄 C語言真的很難嗎&#xff1f;那是你沒看這張圖&#xff0c;化整為零輕松學習C語言。 第一篇&#xff1a;&#xff08;一&#xff09;脫離學習誤區 第…

【學生選課系統經典】C#與SQLSERVER連接:Windows應用工程案例

實驗任務描述 1 用C#訪問SQLSERVER數據庫(兩種安全模式); 2 用C#完成數據庫指定表上的數據顯示; 3 用C#完成數據庫指定表上的數據插入、刪除和更新; 4 用C#完成數據庫用戶驗證。 注意,由于C#語言的強大功能,下面的代碼適用于SQLSERVER2000、也適合于SQLSERVER2005。區別僅…

Java精選筆記_JDBC

JDBC概述 什么是JDBC JDBC全稱是Java數據庫連接&#xff08;Java Database Connectivity&#xff09;&#xff0c;應用程序可通過這套API連接到關系數據庫&#xff0c;并使用SQL語句來完成對數據庫中數據的查詢、更新和刪除等操作。是一套用于執行SQL語句的Java API。Java的數據…

mysql關系數據庫引擎_MySQL數據庫引擎詳解

作為Java程序員&#xff0c;MySQL數據庫大家平時應該都沒少使用吧&#xff0c;對MySQL數據庫的引擎應該也有所了解&#xff0c;這篇文章就讓我詳細的說說MySQL數據庫的Innodb和MyIASM兩種引擎以及其索引結構。也來鞏固一下自己對這塊知識的掌握。Innodb引擎Innodb引擎提供了對數…

Java之synchronized的JVM底層實現原理精簡理解

1 synchronized的JVM底層原理實現的精簡理解 Java 虛擬機中的synchronized基于進入和退出Monitor對象&#xff08;也稱為管程或監視器鎖&#xff09;實現&#xff0c; 無論是顯式同步(synchronized作用在同步代碼塊&#xff0c;有明確的 monitorenter 和 monitorexit 指令) 還是…

三分鐘掌握Actor和CSP模型

點擊上方藍字進行關注前文傳送門&#xff1a;《三分鐘掌握共享內存模型和 Actor模型》&#xff0c; 一直想比較Actor模型與golang的CSP模型&#xff0c;經過一段時間的實戰記錄了本文。Actor vs CSP模型? 傳統多線程的的共享內存&#xff08;ShareMemory&#xff09;模型使用l…

DateTimeToUnix/UnixToDateTime 對接時間轉換

問題&#xff0c;通過毫秒數來解析出時間&#xff1a;&#xff08;很多對接的時候經常需要用到&#xff09; <?php $MyJson {"jingdong_vas_subscribe_get_responce":{"code":"0","item_code":"FW_GOODS-2236-1","…

【學生選課系統經典】VB與SQLSERVER連接:Windows應用工程案例

實驗任務描述 1 用VB6訪問SQLSERVER數據庫(兩種安全模式); 2 用VB6完成數據庫指定表上的數據顯示; 3 用VB6完成數據庫指定表上的數據插入、刪除和更新; 4 用VB6完成SQLSERVER2008數據庫用戶驗證。 一、數據庫系統 該實驗中,所要求的數據庫名稱為SCHOOL,總共涉及以下表:

丟失api-ms-win-crt-runtime-l1-1-0.dll

運行Cmder的時候提示&#xff1a;丟失api-ms-win-crt-runtime-l1-1-0.dll在網上找了一些方法&#xff0c;基本解決方法都是裝VC2015的運行時&#xff0c;但是我安裝的時候出錯&#xff0c;大家可以先試試。接著我就去解決安裝出錯這問題沒&#xff0c;折騰了半天也沒成功。后來…

《假如編程是魔法之零基礎看得懂的Python入門教程 》——(二)魔法實習生第一步了解魔杖的使用

學習目標 了解什么是開發環境了解python語言的環境安裝了解python語言編程的編輯器工具 目錄 第一篇&#xff1a;《假如編程是魔法之零基礎看得懂的Python入門教程 》——&#xff08;一&#xff09;既然你選擇了這系列教程那么我就要讓你聽得懂 第三篇&#xff1a;《假如編…

Java之synchronized可重入性的理解

1 synchronized可重入性的理解 當一個線程試圖操作一個由其他線程持有的對象鎖的臨界資源時&#xff0c;將會處于阻塞狀態&#xff0c;但當一個線程再次請求自己持有對象鎖的臨界資源時&#xff0c;如果當前鎖是重入性&#xff0c;會請求將會成功&#xff0c;如果當前鎖不是可…