CI框架大纲总结

一、大纲

[php] view plaincopy

  1. 1、codeigniter框架的授课内容安排
  2. 2、codeigniter框架的简介
  3. |-----关于框架的概念
  4. |-----使用CI框架的好处
  5. |-----为什么选择CI框架
  6. 3、codeigniter框架的具体安装步骤
  7. |-----官网下载:http://www.codeigniter.com/
  8. |-----httpd.conf配置文件中rewrite重写机制的开启
  9. |-----httpd.conf配置文件虚拟主机的开启
  10. |-----httpd-vhosts.conf配置文件中虚拟主机的配置
  11. |-----hosts文件中添加DNS映射
  12. 4、codeigniter框架的目录结构分析
  13. |-----框架目录结构分析
  14. |-----项目部署
  15. 5、codeigniter框架中URL各部分的分析及简单的工作原理:http://域名/入口文件/模块名/控制器/方法/参数列表
  16. 6、codeigniter框架详细执行流程分析:如果没有模块文件夹的话,则为:http://域名/入口文件/控制器/方法/参数列表
  17. 7、codeigniter框架中config.php配置文件的分析
  18. 8、codeigniter框架中使用rewrite重写机制隐藏index.php单一入口文件
  19. 9、codeigniter框架中控制器
  20. |-----控制器的创建位置
  21. |-----控制器的命名规范
  22. |-----控制器文件的分目录管理
  23. |-----方法的命名规范:1、不能以list命名 2、方法名与类名不同名
  24. |-----方法中如何获取GET方式提交过来的数据,如:$username = $this->input->get_post(‘username‘, true);//获取post或get方式提交过来的数据
  25. |-----方法中如何获取POST方式提交过来的数据,如:$username = $this->input->post(‘username‘, true);$username = $this->input->get_post(‘username‘, true);
  26. 10、codeigniter框架中视图
  27. |-----视图的创建位置:appcation/views/ 目录下
  28. |-----视图的命名规范:login.php   login.html
  29. |-----如何在控制器中载入视图模板文件:$this->load->view("login"); $this->load->view("login.html");
  30. |-----如何在控制器中给视图模板文件传递数据:$this->load->view("login.html",$data);//extract函数
  31. |-----视图模板文件的分目录管理:$this->load->view("admin/category/addcategory.html");
  32. 11、codeigniter框架中的模型
  33. |-----模型的创建位置:application/models 目录下
  34. |-----模型的命名规范:不区分大小写,建议首字母大写
  35. |-----如何在控制器中载入模型(自动加载和手动加载):$this->load->model("user_model");
  36. |-----模型文件的分目录管理:$this->load->model("admin/user_model");
  37. 12、codeigniter框架中如何扩展控制器、模型
  38. |-----基控制器的扩展:class Common extends CI_Controller{}
  39. |-----基模型的扩展:class Model extends CI_Model{}
  40. 13、codeigniter框架中数据库操作
  41. |-----连接mysql数据库的配置:application/config/database.php
  42. |-----如何在模型中连接mysql数据库(自动载入和手动载入):$this->load->database();
  43. |-----使用普通查询操作完整数据的增删改查操作:1、$this->db->query($query);//结果集
  44. |-----使用快捷操作类完成数据的增删改查操作:将sql语句的拼接放在成员方法中进行
  45. |-----用户管理系统-管理员的查询
  46. |-----用户管理系统-管理员的添加
  47. |-----用户管理系统-管理员的修改
  48. |-----用户管理系统-管理员的删除
  49. 14、codeigniter框架中辅助函数
  50. |-----辅助函数的位置:application/helpers 目录 或 system/helpers 目录
  51. |-----如何在控制器中载入辅助函数:$this->load->helper("url");//载入url_helper.php文件
  52. |-----自定义辅助函数
  53. |-----辅助函数的扩展
  54. |-----辅助函数的载入机制:首先考虑载入application/helpers 目录下的文件,再考虑载入system/helpers 目录下的文件
  55. |-----用户管理系统-页面的跳转:header("location:".site_url("admin/login/"));//创建一个url,并跳转
  56. 15、codeigniter框架中的配置文件
  57. |-----配置文件的位置:application/config/ 目录下
  58. |-----如何在CI项目的控制器中载入配置文件(手动载入和自动载入):$this->config->load("pagination");
  59. |-----如何自定义配置文件:application/config/pagination.php    配置项变量名必须是 $config[‘配置项‘]
  60. |-----配置文件中配置项的命名规范:$config[‘配置项‘]
  61. |-----如何动态给配置项设置值:$this->config->set_item("配置项","配置项值");
  62. |-----如何将分页配置写到配置文件中
  63. |-----如何将配置文件合并:$this->config->load("pagination",true);//参数2:true
  64. 16、codeigniter框架中的通用类库
  65. |-----通用类库的位置:application/libraries/ 目录 system/libraries/ 目录
  66. |-----如何在ci项目的控制器中载入通用类库:$this->load->library("upload");//文件上传类库的载入
  67. |-----通用类库的载入机制:优先考虑载入application/libraries/ 目录下类库,其次考虑载入 system/libraries 目录下类库
  68. |-----分页类库的载入(定制分页风格):$this->load->library("pagination");
  69. |-----用户管理系统-管理员列表页分页功能的完成
  70. 17、codeigniter框架与smarty模板引擎的无缝整合
  71. |-----如何将第三方类库:smarty模板引擎整合到CI项目中来
  72. |-----如何在控制器中载入smarty模板引擎:$this->load->library("tp");
  73. 18、codeigniter框架中完成用户登录系统
  74. |-----用户登录系统-session类库的使用
  75. |-----用户登录系统-cookie类库的使用
  76. |-----用户登录系统-使用captache辅助函数完成图像验证码的创建
  77. |-----用户登录系统-验证码原理
  78. |-----用户登录系统-session登录
  79. |-----用户登录系统-cookie登录
  80. |-----用户登录系统-增加公共操作控制器(扩展系统核心控制器类文件)
  81. |-----用户登录系统-cookie的三种使用方式
  82. |-----php原生态语法结构中设置cookie的函数
  83. |-----ci框架的cookie辅助函数
  84. |-----input类库
  85. 19、codeigniter框架与ueditor编辑器的无缝整合
  86. |-----整合步骤
  87. 20、codeigniter框架与fckeditor编辑器的无缝整合
  88. |-----整合步骤
  89. 21、codeigniter框架中完成无限级分类下拉菜单
  90. |-----无线递归方式完成(比较复杂一点,效率低,不推荐使用)
  91. |-----path方式完成(最为简便的方式,几行代码就可搞定)
  92. 22、codeigniter框架中使用jquery完成省市区三级联动功能
  93. 23、codeigniter框架中完成商品分类管理模块
  94. |-----商品分类管理模块-添加商品分类
  95. |-----商品分类管理模块-添加商品子分类
  96. |-----商品分类管理模块-修改商品分类
  97. |-----商品分类管理模块-商品分类列表
  98. |-----商品分类管理模块-商品分类的删除
  99. |-----商品分类管理模块-商品分类排序
  100. |-----文件上传类库的使用
  101. |-----图像处理类库的使用
  102. |-----商品分类管理模块-添加分类banner
  103. |-----如何将文件上传和图像处理的有关配置放到配置文件中
  104. |-----商品分类管理模块-分类banner列表
  105. |-----商品分类管理模块-编辑分类banner
  106. |-----商品分类管理模块-banner的启用和禁用
  107. |-----商品分类管理模块-分类banner排序
  108. 24、codeigniter框架完成一个权限管理系统
  109. |-----权限管理系统-数据表的创建
  110. |-----权限管理系统-业务分析
  111. |-----权限管理系统-操作权限管理
  112. |-----权限管理系统-添加操作权限
  113. |-----权限管理系统-修改操作权限
  114. |-----权限管理系统-删除操作权限
  115. |-----权限管理系统-模块管理
  116. |-----权限管理系统-添加模块
  117. |-----权限管理系统-修改模块
  118. |-----权限管理系统-删除模块
  119. |-----权限管理系统-角色管理
  120. |-----权限管理系统-添加角色并为角色设置权限
  121. |-----权限管理系统-为当前角色添加操作权限
  122. |-----权限管理系统-为当前角色删除操作权限
  123. |-----权限管理系统-修改角色
  124. |-----权限管理系统-删除角色
  125. |-----权限管理系统-添加管理员的同时为管理员设置多个角色
  126. |-----权限管理系统-添加管理员角色
  127. |-----权限管理系统-修改管理员角色
  128. |-----权限管理系统-删除管理员角色
  129. |-----权限管理系统-当前管理员角色列表
  130. 25、显示最后一条查询的sql语句:主要用于在连贯操作时,检测拼接的sql语句是否正确
  131. echo $this->db->last_query();//如:select * from pt_users where uid>10 order by datetime desc limit 0,10

[php] view plaincopy

  1. 26、CI_DB_pdo_driver PDO数据库驱动类
  2. $this->db->affected_rows();//影响记录数,区分:$this->db->get("order_master")->num_rows();//获取到的结果集行数
  3. $this->db->count_all("order_master");//对于某个表不带条件的查询
  4. $this->db->count_all_results();//快捷操作类方法,适用于带条件的查询
  5. $this->db->insert_id();//新插入记录的id
  6. $this->db->trans_enabled = true;//开启事务(默认是false,所以在使用事务前必须将其赋值为true)
  7. $this->db->trans_begin();//开始事务
  8. $this->db->trans_rollback();//事务回滚
  9. $this->db->trans_commit();//提交事务
  10. $this->db->trans_status();//事务状态 true 或 false         CI_DB_driver驱动类中的方法

[php] view plaincopy

  1. 27、CI_DB_mysql_driver  mysql数据库驱动类
  2. $this->db->affected_rows();//影响记录数,区分:$this->db->get("order_master")->num_rows();//获取到的结果集行数
  3. $this->db->count_all("order_master");//对于某个表不带条件的查询
  4. $this->db->count_all_results();//快捷操作类方法,适用于带条件的查询
  5. $this->db->insert_id();//新插入记录的id
  6. $this->db->trans_enabled = true;//开启事务(默认是false,所以在使用事务前必须将其赋值为true)
  7. $this->db->trans_begin();//开始事务
  8. $this->db->trans_rollback();//事务回滚
  9. $this->db->trans_commit();//提交事务
  10. $this->db->trans_status();//事务状态 true 或 false         CI_DB_driver驱动类中的方法

[php] view plaincopy

  1. 28、CI_DB_mysqli_driver  mysqli数据库驱动类
  2. $this->db->affected_rows();//影响记录数,区分:$this->db->get("order_master")->num_rows();//获取到的结果集行数
  3. $this->db->count_all("order_master");//对于某个表不带条件的查询
  4. $this->db->count_all_results();//快捷操作类方法,适用于带条件的查询
  5. $this->db->insert_id();//新插入记录的id
  6. $this->db->trans_enabled = true;//开启事务(默认是false,所以在使用事务前必须将其赋值为true)
  7. $this->db->trans_begin();//开始事务
  8. $this->db->trans_rollback();//事务回滚
  9. $this->db->trans_commit();//提交事务
  10. $this->db->trans_status();//事务状态 true 或 false         CI_DB_driver驱动类中的方法

[php] view plaincopy

  1. 29、model模型类中引用其它model模型类(如:category_model)和数据库(如:product)
  2. public function __construct() {
  3. parent::__construct();
  4. $this->product_db = $this->load->database(‘product‘, true);//通过model基类中的__get()方法选择性的引入CI超级对象中已加载类库,如:"load"
  5. $this->load->model(‘category_model‘);
  6. }

[php] view plaincopy

  1. 30、控制器中引用其它模型类(如:category_model)和数据库(如:product)
  2. public function __construct() {
  3. parent::__construct();
  4. $this->product_db = $this->load->database(‘product‘, true);
  5. $this->load->model(‘category_model‘);
  6. }

[php] view plaincopy

  1. 31、helper函数中引用CI超级对象的方法
  2. function get_order_status_by_order($order_status){
  3. $CI =& get_instance();//获取CI超级对象
  4. $CI->load->Model(‘order_model‘);//通过CI超级对象可以载入任何模型
  5. }

[php] view plaincopy

  1. 32、缓存驱动的加载方式
  2. $this->load->driver(‘cache‘, array(‘adapter‘ => ‘memcached‘));//加载缓存驱动或缓存适配器,当前为memcached缓存;注意:CI框架只支持memcached,不支持memcache,windows操作系统下只有memcache扩展
  3. $this->load->driver(‘cache‘, array(‘adapter‘ => ‘file‘));//加载缓存驱动或缓存适配器,当前为file缓存
  4. $this->load->driver(‘cache‘, array(‘adapter‘ => ‘redis‘));//加载缓存驱动或缓存适配器,当前为redis缓存
  5. $this->load->driver(‘cache‘, array(‘adapter‘ => ‘apc‘, ‘backup‘ => ‘file‘));//优先选择apc缓存,file文件缓存作为替代方案;如果服务器不支持apc缓存时,选择file文件缓存

[php] view plaincopy

  1. 33、静态html模板文件中如何动态加载区域块内容
  2. //index.html文件
  3. <div include="/index.php/pub/common_nav" rel="include"></div>
  4. //jquery代码
  5. $(document).ready(function () {
  6. $(‘[rel=\‘include\‘]‘).each(function (e) {
  7. var t = $(this),
  8. url = t.attr(‘include‘) + location.search;
  9. url && $.get(url, function (data) {//url:‘/index.php/pub/common_nav‘
  10. t.html(data);
  11. })
  12. })
  13. })

[php] view plaincopy

  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

  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

  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

  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. if ($query->num_rows() > 0) {
  25. return $query->result_array();
  26. }
  27. return array();
  28. }

[php] view plaincopy

  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

  1. 39、CI框架中cookie的三种使用方式
  2. //第一种设置cookie的方式:采用php原生态的方法设置的cookie的值
  3. setcookie("user_id",$user_info[‘user_id‘],86500);
  4. setcookie("username",$user_info[‘username‘],86500);
  5. setcookie("password",$user_info[‘password‘],86500);
  6. //echo $_COOKIE[‘username‘];
  7. //第二种设置cookie的方式:通过CI框架的input类库设置cookie的值
  8. $this->input->set_cookie("username",$user_info[‘username‘],60);
  9. $this->input->set_cookie("password",$user_info[‘password‘],60);
  10. $this->input->set_cookie("user_id",$user_info[‘user_id‘],60);
  11. //echo $this->input->cookie("password");//适用于控制器
  12. //echo $this->input->cookie("username");//适用于控制器
  13. //echo $_COOKIE[‘username‘];//在模型类中可以通过这种方式获取cookie值
  14. //echo $_COOKIE[‘password‘];//在模型类中可以通过这种方式获取cookie值
  15. //第三种设置cookie的方式:通过CI框架的cookie_helper.php辅助函数库设置cookie的值
  16. set_cookie("username",$user_info[‘username‘],60);
  17. set_cookie("password",$user_info[‘password‘],60);
  18. set_cookie("user_id",$user_info[‘user_id‘],60);
  19. //echo get_cookie("username");

[php] view plaincopy

  1. 40、array_merge()合并数组函数的使用
  2. <?php
  3. header("content-type:text/html;charset=‘utf-8‘");
  4. $arr1=array(
  5. "13012"=>array(
  6. "brand_id"=>2,
  7. "category_id"=>3
  8. )
  9. );
  10. $arr2=array(
  11. "13012"=>array(
  12. "goods_id"=>3576,
  13. "goods_name"=>"sanyang"
  14. )
  15. );
  16. /**
  17. *echo "<pre>";print_r(array_merge($arr1,$arr2));
  18. *结果:
  19. *Array
  20. *  (
  21. *      [0] => Array //索引重置为数字索引
  22. *          (
  23. *              [brand_id] => 2
  24. *              [category_id] => 3
  25. *          )
  26. *      [1] => Array
  27. *          (
  28. *              [goods_id] => 3576
  29. *              [goods_name] => sanyang
  30. *          )
  31. *  )
  32. */
  33. /**
  34. *echo "<pre>";print_r(array_merge($arr1[‘13012‘],$arr2[‘13012‘]));
  35. *结果:
  36. *  Array
  37. *  (
  38. *      [brand_id] => 2
  39. *      [category_id] => 3
  40. *      [goods_id] => 3576
  41. *      [goods_name] => sanyang
  42. *  )
  43. */
  44. ?>

[php] view plaincopy

  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

  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. $goods_list = $this->activity_model->get_activity_good_mapping($query, 0, 0);
  10. //model模型
  11. public function get_activity_good_mapping($query,$offset = 0, $limit = 0,$get=‘‘){
  12. $this->db = $this->activity_db;
  13. if (is_array($query) && !empty($query)) {
  14. foreach ($query as $key => $val) {
  15. if (is_array($val)) {
  16. $this->db->where_in($key, $val);
  17. } else {
  18. $this->db->where($key, $val);
  19. }
  20. }
  21. }
  22. $this->db->from(‘activity_goods‘);
  23. $this->db->join(‘activity‘, ‘activity_goods.activity_id = activity.activity_id‘,‘left‘);
  24. if (!$limit) {
  25. } else {
  26. $query = $this->db->limit($limit, $offset);
  27. }
  28. $query = $this->db->get();
  29. if ($query->num_rows() > 0) {
  30. return $query->result_array();
  31. }
  32. return array();
  33. }

[php] view plaincopy

  1. 43.ci框架如何记录sql日志?
  2. (1)配置日志目录: 在"application/config/config.php" 文件中配置日志目录
  3. $config[‘log_path‘]="/opt/www/logs/";
  4. (2)在 "system/database/DB_driver.php" 文件的query()方法末尾添加如下语句:
  5. log_message( ‘db‘,‘【sql语句:‘.$this->last_query().‘】‘);//这样所有执行过的sql语句都会按日期时间格式记录到 "/opt/www/logs/" 目录下
  6. return $RES;

二、部分截图如下:

三、数据库操作类之间的继承关系(区分数据库普通操作类和数据库快捷操作类),如图所示:

注意:CI_DB类是在DB()函数中动态定义的,没有单独的类库文件

DB()函数在DB.php文件中定义

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

[php] view plaincopy

  1. require_once(BASEPATH.‘database/DB_driver.php‘);//类名:CI_DB_driver
  2. if ( ! isset($active_record) OR $active_record == TRUE)
  3. {
  4. require_once(BASEPATH.‘database/DB_active_rec.php‘);
  5. if ( ! class_exists(‘CI_DB‘))
  6. {
  7. eval(‘class CI_DB extends CI_DB_active_record { }‘);//继承关系
  8. }
  9. }
  10. else
  11. {
  12. if ( ! class_exists(‘CI_DB‘))
  13. {
  14. eval(‘class CI_DB extends CI_DB_driver { }‘);//继承关系
  15. }
  16. }
  17. require_once(BASEPATH.‘database/drivers/‘.$params[‘dbdriver‘].‘/‘.$params[‘dbdriver‘].‘_driver.php‘);//类名:CI_DB_mysql_driver
  18. // Instantiate the DB adapter
  19. $driver = ‘CI_DB_‘.$params[‘dbdriver‘].‘_driver‘;//类名:"CI_DB_mysql_driver"
  20. $DB = new $driver($params);//创建一个数据库操作类句柄对象: $DB=new CI_DB_mysql_driver($paams); 继承关系:class CI_DB_mysql_driver extends CI_DB{}
  21. if ($DB->autoinit == TRUE)
  22. {
  23. $DB->initialize();
  24. }
  25. if (isset($params[‘stricton‘]) && $params[‘stricton‘] == TRUE)
  26. {
  27. $DB->query(‘SET SESSION sql_mode="STRICT_ALL_TABLES"‘);
  28. }
  29. 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

  1. //CI_DB_driver 基类中的load_rdriver()方法在数据库普通操作基类中的query()方法中被调用,用来返回一个结果集对象
  2. function load_rdriver(){
  3. $driver = ‘CI_DB_‘.$this->dbdriver.‘_result‘;
  4. if ( ! class_exists($driver))
  5. {
  6. include_once(BASEPATH.‘database/DB_result.php‘);//类名:CI_DB_result
  7. include_once(BASEPATH.‘database/drivers/‘.$this->dbdriver.‘/‘.$this->dbdriver.‘_result.php‘);//类名:CI_DB_mysql_result
  8. }
  9. return $driver;//继承关系:class CI_DB_mysql_result extends CI_DB_result
  10. }

提示:也就是说,类似 $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 {

//代码

}

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

时间: 2024-11-05 20:48:29

CI框架大纲总结的相关文章

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

http://blog.csdn.net/yanhui_wei/article/details/25803945 一.大纲 [php] view plaincopy 1.codeigniter框架的授课内容安排 2.codeigniter框架的简介 |-----关于框架的概念 |-----使用CI框架的好处 |-----为什么选择CI框架 3.codeigniter框架的具体安装步骤 |-----官网下载:http://www.codeigniter.com/ |-----httpd.conf配

CI框架源码阅读笔记3 全局函数Common.php

从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap引导文件都会最先引入全局函数,以便于之后的处理工作). 打开Common.php中,第一行代码就非常诡异: if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 上一篇(CI框架源码阅读笔记2 一切的入口 index

后盾网-CI框架学习笔记

CI框架: 表单验证: 载入验证类 $this->load->library('form_validation'); 设置规则 $this->form_validation->set_rules('name值','规则'); 执行验证 $this->form_validation->run() 表单验证辅助函数: $this->load->helper('form'); 1. set_value('name') //重填数据 2. form_error('n

CI框架3.0版本以后,前后台分离的方法。

笔者认为,CI框架官方其实并没有考虑这个前后台分离的问题,所以没有官方的分离方法.而且,2.0版本的分离,也被官方认为这是一个bug.所以在前后台分离这个问题上,其实并不如thinkphp框架. 在CI框架2.0版本时的,大多数人认为可以这样做,前后台分离是可以直接在controller下,分admin和home目录的. 这是2.0版本时 其实,今天我用的是3.0版本的CI框架.在前后台分离这个问题,我也纠结了比较久.但是为了项目结构目录的清晰,还是要做前后台分离的. 我大概是做了这样一个分离.

CI框架剖析一

CodeIgniter 是一个小巧但功能强大的 PHP 框架,作为一个简单而"优雅"的工具包,它可以为开发者们建立功能完善的 Web 应用程序.本人使用CI框架有一段时间了,现在决定把该框架源码剖析一遍,理解其构架的用意与精妙之处.分析完所有的源码后,我才来总结CI框架的优缺点,以及适用于哪些场景开发. 目前CI最新的版本是 3.1.4, 4.0版本也即将发布.我们先分析3.1.4版本,然后再看看4.0有哪些重大突破. 首先是查看根目录下index.php文件了,主要定义了几个常量:

【ci框架基础】之部署百度编辑器

在ci框架下加载编辑器,现在复习下内容.我的框架文件名称为ci 1.下载百度编辑器ueditor,http://ueditor.baidu.com/ 一般情况下下载ubuilder版即可,并将ueditor复制到ci框架的根目录下. 下载好的编辑器目录为:-ueditor----dialogs     弹出对话框对应的资源和JS文件----lang        编辑器国际化显示的文件----php         涉及到服务器端操作的后台文件----themes      样式图片和样式文件-

ngnix 配置CI框架 与 CI的简单使用

ngnix 支持 CI框架1.修改config.php 参考网址:https://www.chenyudong.com/archives/codeigniter-in-nginx-and-url-rewrite.html 2. ci小样例 http://www.mamicode.com/info-detail-514033.html 控制器的默认配置文件: routes.php, 不修改默认为跳转到welcome控制器 3.修改CI为子目录 https://yq.aliyun.com/artic

CI框架源码分析

这几天,把ci源码又看了一遍,于是有了新的收获.明白了在application目录下core文件夹的作用,就是用来写ci核心文件的扩展的, 而且需要在配置文件中添加类前缀MY_. CI框架整体是但入口文件,入口文件是Index.php在该文件中定义了一些系统变量,比如BASEPATH和 APPPATH等,最后加载ci框架的核心文件CodeIgniter文件,该文件位于system文件夹下的core文件夹下,此文件夹是ci的核心文件,包括了 controller,model,router,conf

CI框架程序--本地调试之后部署新浪SAE

转载之前写的一点点东西,希望可以帮助到一些朋友 前几天给朋友写了个简单的网站, 想想还是部署到服务器上让朋友看一下效果! 用CI框架写的,有个SAE新浪云的账号,可以用!就部署到上面去了!途中遇到了一些问题!一一解决了! 在这里分享一下 供遇到这些问题的朋友们做个参考! 首先遇到的问题就导入SQL数据的时候出错,由于我SAE上之前写过一个程序,导入数据的时候,怎么选都选不到刚创建的MySql上, 貌似是要绑定一下! 我用的mac 火狐浏览器, 好像SAE上的MySQL的phpmyadmin跟这个