【ci框架】ci框架授课思路

--------------------------------------------------------------------------------------------------------------------------------------------------javascript

授课过程当中若是涉及到文件夹或目录时,可以使用缩进进行演示:php

applicationcss

|-----librarieshtml

|-----xxx_helper.php前端

systemjava

|-----librariesweb

|-----url_helper.phpsql

-----------------------------------------------------------------------------------------------------------------------------------------------------thinkphp

1、什么是框架?数据库

2、框架的优缺点分析及为何要选择框架
3、主流MVC框架介绍:


    一、thinkphp
    二、zendframework
    三、ci
    四、yii


4、CI框架特性介绍:


    一、轻量级:核心系统的类库很是小
    二、采用了最流行的MVC架构模式
    三、生成干净的对搜索引擎友好化的url
       http://www.kuxiu.net/index.php/common/login/
    
    四、功能很是强大:
       拥有全范围的类库,可完成一个项目的大多数通用功能,包括: 读取数据库、发送电子邮件、数据确认、保存 session 、对图片的操做,以及支持 XML-RPC 数据传输等
    
    五、不须要模板引擎:


       虽然CI框架自带了一个可选的模板解析器程序,但不要求你必须使用模板;
       虽然模板引擎的代码比较清晰,但这会带来一个性能问题,由于伪代码要先被转换成PHP才能运行。咱们的目标是性能最大化, 因此咱们选择不使用专用的模板引擎。


       固然,咱们也可使用ci框架自带的模板引擎,也能够整合第三方的模板引擎到ci框架中:smarty模板引擎
    
    六、中文化的文档全面:
       
       虽然是一款国外的框架,可是中文化的文档也是很是全面,便于咱们查阅



5、MVC模式:
视图、
模型:
控制器
6、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以前执行,举一个例子吧,有一次,项目要上线,可是服务器时间怎么调也不正确。(由于要存订单时间),没办法,一时调很差服务器,就写了一个钩子设置时区。(只是做为临时方案)


    一、index.php 做为前端控制器,初始化运行 CodeIgniter 所须要的基本资源。 
    二、Router 检查 HTTP 请求,以肯定谁来处理请求。 
    三、若是缓存(Cache)文件存在,它将绕过一般的系统执行顺序,被直接发送给浏览器。 
    四、安全(Security)。应用程序控制器(Application Controller)装载以前,HTTP 请求和任何用户提交的数据将被过滤。 
    五、控制器(Controller)装载模型、核心库、辅助函数,以及任何处理特定请求所需的其它资源。 
    六、最终视图(View)渲染发送到 Web 浏览器中的内容。若是开启缓存(Caching),视图首先被缓存,因此将可用于之后的请求。 




7、URL调度模式:


    一、如何修改默认执行的控制器和方法:
       application/config/routes.php中配置以下项:

       $route['default_controller'] = "common";//默认执行的控制器

       


8、model详解:
    一、模型类的命名规范:主须要首字母大写便可,建议采用 User_model 形式
    二、引用模型的两种方式:
       $this->load->model("user_model");//引用user_model模型
       $this->load->model("User_model");//应用user_model模型,这两种方式是等价的
9、实例化模型的执行流程:
    $this->load->model("user_model");//引用user_model模型


10、CI框架中session与cookie类库的使用:cookie登录、session登录


11、CI框架中文件处理类库及图像处理类库的使用:文件上传、缩略图、水印功能


12、CI框架与smarty模板引擎的无缝整合:在项目中的应用


    提示:虽然模板引擎的代码比较清晰,但这会带来一个性能问题,由于伪代码要先被转换成PHP才能运行。咱们的目标是性能最大化, 因此咱们选择不使用专用的模板引擎


十3、CI框架与UEditor编辑器的无缝整合:在项目中的应用(路径问题)


十4、CI框架与报表类库的无缝整合:在项目中的应用(报表的导入导出)


十5、导入机制和配置文件加载流程介绍


十6、配置文件:
    一、主配置文件:application/config/config.php,已自动加载,无需手动启用
       分析:配置项目被存储在一个叫$config[]的数组里面,你能够添加本身的配置项目到这个文件中
    二、加载单个自定义的配置文件:
       $this->config->load("thumb_settings");//配置文件的文件名,不带.php扩展名
    三、加载多个自定义配置文件:
       若是须要加载多个自定义配置文件,通常状况下他们会被合并为一个数组;若是在不一样的配置文件中存在同名的索引,那么将会发生冲突;为了不这个问题,你能够将第二个参数设置为true、这样可使每一个配置文件中的内容存储在一个单独的数组中,数组的索引就是配置文件的名称
       $this->config->load("thumb_settings",true);
       //至关于以下方式: 
       $this->config['thumb_settings'] = $thumb_settings;


       //参数3用来屏蔽当配置文件不存在时产生的错误信息
       $this->config->load("thumb_settings",false,true);


    四、如何获取配置文件中的配置项:

       //加载配置文件:
       $this->config->load("thumb_settings");//缩略图相关的配置文件
       //当视图获取的配置项不存在时,将返回false
       $this->config->item("config_thumb");//缩略图的相关配置项
    
    五、如何动态设置一个配置项:


       //动态设置生成的缩略图的名字
       $this->config->set_item("new_image",time.().$this->file_ext);
    
    六、思考一个问题:配置项是否能够为数组呢?


    七、配置类辅助函数:


       $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


十7、分页类的使用:
      
      //加载分类类库
      $this->load->pagination("pagination");


十8、数据库的增删改查:


      普通查询:
      
      一、$this->db->database();//加载数据库实例化对象


      二、$query=$this->db->query($sql);//执行查询,返回结果集;注意:query是普通数据库操做类中的方法,快捷操做类继承自普通数据库操做类,因此快捷操做类中也有query方法,query方法返回一个结果集对象


      三、$object_array=$query->result();//返回一个对象数组;result是结果集类中的方法
         foreach($object_array as $object){
  echo $object->name;
         }


      四、$data_array=$query->result_array();//返回一个二维关联数组;result_array()是结果集类中的方法,主要用来将结果集转换为二维关联数组
         foreach($data_array as $row){
  echo $row['name'];
         }
      
      五、$object=$query->row();//返回一个对象;


      六、$row=$query->row_array();//返回一维数组


      七、$query->num_rows();//返回查询到的记录数


      八、$this->db->affected_rows(); //返回受影响的记录数


      九、$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();


十9、辅助函数的加载:


      //单个辅助函数文件的加载
      $this->load->helper("url");//辅助函数文件的名字


      //多个辅助函数文件的加载
      $this->load->helper(array(
"url",
"pagination",
"image_lib"
      ));


      //一旦你载入了想要用到辅助函数文件,能够用标准的函数调用方法来使用里面的函数。


      base_url();// $this->base_url()是错误的写法


      
      一、如何扩展系统原有的helper函数库?
         在application/helpers/ 文件夹下创建一个文件,命名为:MY_原系统函数库名.php


      二、如何设置默认扩展文件名的前缀?
         找到application/config/config.php配置文件
         修改$config['subclass_prefix'] = 'MY_';便可
      
      三、如何修改数据表的前缀?
         找到application/config/database.php配置文件
修改$db['default']['dbprefix'] = 'gt_';//数据表的前缀

二10、如何设置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


二11、总结:


一、关于缩略图的配置项目能够放在config.php文件中


二、$this->db->insert("user",$data);//要求数据表中除主键字段外,其它字段在$data关联数组中都有默认值才能执行成功,提示:$data通常为一维关联数组
   $this->db->insert_batch("user",$data);//$data通常为二维关联数组


三、跳转:header("location:".site_url("common/login"));


四、设置时区
   $config['time_zone']=date_default_timezone_set('Asia/shanghai');


五、推荐使用链式操做
   $query=$this->db->query($sql);
   $data_array=$query->result_array();


   等价于:


   $data_array=$this->db->query($sql)->result_array();


六、如何配置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;//建立成功返回路径
   
        }     

七、系统加载类库:core/Loader.php
  
   以下函数都在此类库中定义


   $this->load->model("");
   $this->load->library("");
   $this->load->database("");
   $this->load->helper("");
   $this->config->load();

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

<?php

一、在讲解文件所在目录方面的问题时:

application
	|-----core
		|-----MY_Controller.php


system
	|-----core
		|-----Controller.php





思路:

1、目前在企业中使用比较多的框架有以下几种:

一、zendframework框架:此框架由zend公司开发并负责维护,入门比较困难一点,可是听说功能很强悍,属于一款偏重量级的MVC框架
二、Yii框架:又称为 "易框架",在外企使用居多
三、thinkphp框架:是国人开发的一款框架,因为它的注释和使用文档都是中文,因此很受国人的喜欢
四、codeigniter框架:简称CI框架,是国外一款流行的框架,跟前面的框架比较,ci框架是最轻量级的,也是最容易上手的


2、咱们选择这款框架来学习,主要有如下几点缘由:

一、ci是一个轻量级的框架,关于轻量级,可从两方面来理解:
	一、体积小,解压后不到4M,zendframework解压后60M左右
	二、占用资源少:ci应用程序在运行的时候,只是将正常运行所必须的几个核心类库载入到了内存中,其它类库在请求的时候才会加载,这样就达到了资源的最小化,这跟那些须要不少资源的框架是不同的,有些框架在运行的时候,会将全部的类库首先载入内存中,而无论这些类库是否可以用的到,如:cakephp
	三、可是这个轻量级,并不影响它开发大型的web应用程序,为何这么说呢?
	首先,它自身所提供的类库,已经可以帮助咱们完成web应用程序中的大部分功能
	再者,ci框架在整合第三方类库方面也有独到的优点,几乎不须要进行任何配置

二、整合第三方类库简单,几乎不须要进行任何配置

三、不须要使用模板引擎技术
   
   你们知道,php原生态的语法结构执行效率是最高的,由于跟使用了模板引擎技术的程序相比较,它少了一个编译的过程


3、下面,咱们就来进行ci框架的安装:

ci框架的安装,咱们只须要按照以下步骤进行操做就能够了
一、官网:http://www.codeigniter.com 去下载ci框架最新的版本,目前最新版本为2.1.3
   中文网站:http://www.codeigniter.org.cn 

二、下载完毕后,解压,并将其复制粘贴到程序的主目录(d:/wamp/xmall/),而后再将其重命名为"myshop",那么"myshop" 就做为ci项目名称存在了

三、为咱们的ci项目搭建一个虚拟主机:

   首先,找到httpd.conf配置文件,开启虚拟主机的配置

   而后,找到httpd-vhosts.conf配置文件,进行虚拟主机的配置

   最后,找到hosts配置文件,为咱们的ci项目添加dns映射

四、在浏览器中输入 http://www.myshop.com/index.php 回车,如能看到以下欢迎界面,则表示咱们的ci项目安装成功了


4、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				入口文件




5、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" 配置文件中进行设置的,咱们能够从新设置默认的控制器


6、项目的部署:咱们在实际部署大型项目时,还能够创建一些子目录及文件来帮助咱们更好的管理咱们的项目

一、子目录及入口文件的建立

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入口

二、将后台模板文件及素材文件部署到咱们的ci项目中来

css文件中采用绝对路径
模板文件中采用绝对路径

三、创建后台控制器文件:

application
	|-----controllers
		|-----admin
			|-----index.php		index.php控制器文件
			|-----user.php		用户控制器文件
控制器的命名规范

$this->load->view("admin/index.html");//将后台模板文件显示出来

四、将先后台素材文件的路径写到常量文件中: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:关联数组

五、也能够将素材文件的路径放到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:关联数组



六、创建后台模型文件:

application
	|-----models
		|-----admin
			|-----user_model.php		用户模型文件

模型文件的命名规范

如何在控制器中调用模型文件:

//一、实例化后台的user_model类对象,对象名称为user_model
//二、将user_model实例化对象做为控制器的user_model属性
//三、所以,咱们能够在控制器中经过 $this->user_model 来获取user_model类对象,继而能够调用对象中的方法
$this->load->model("admin/user_model");

$this->user_model->adduser();


七、数据库操做:

数据表的建立: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("*");//一、返回一个db类实例化对象 二、将实例化对象做为模型类的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();







?>