zoukankan      html  css  js  c++  java
  • ThinkPhp框架对“数据库”的基本操作

    框架有时会用到数据库的内容,在"ThinkPhp框架知识"的那篇随笔中提到过,现在这篇随笔详细的描述下。

    数据库的操作,无疑就是连接数据库,然后对数据库中的表进行各种查询,然后就是对数据的增删改的操作,一步步的讲述一下框架对数据库的操作

    想要操作数据库,第一步必然是要:链接数据库

    一、链接数据库

    (1)找到模块文件夹中的Conf文件夹,然后进行编写config.php文件

    我这里是这样的文件路径

    (2)打开这个config.php文件,然后找到父类配置文件convention.php文件,将关于"数据库"的部分复制粘贴到config.php配置文件中

     /* 数据库设置 */
        'DB_TYPE'               =>  '',     // 数据库类型
        'DB_HOST'               =>  '', // 服务器地址
        'DB_NAME'               =>  '',          // 数据库名
        'DB_USER'               =>  '',      // 用户名
        'DB_PWD'                =>  '',          // 密码
        'DB_PORT'               =>  '',        // 端口
        'DB_PREFIX'             =>  '',    // 数据库表前缀
        'DB_FIELDS_CACHE'       =>  true,        // 启用字段缓存(开发时这个要写成false)

    下面是我的数据库连接内容

    <?php
        return array(
    	//'配置项'=>'配置值'
    	
    	/* 数据库设置 */
    	'DB_TYPE'               =>  'mysql',     // 数据库类型
          'DB_HOST'               =>  'localhost', // 服务器地址
          'DB_NAME'               =>  'test3',          // 数据库名
          'DB_USER'               =>  'root',      // 用户名
          'DB_PWD'                =>  '123',          // 密码
          'DB_PORT'               =>  '3306',        // 端口
          'DB_PREFIX'             =>  '',       // 数据库表前缀
        'DB_FIELDS_CACHE'       =>  false,    // 启用字段缓存(开发时这个要是false)
    );

    连接成功后,然后就是新建模型文件了

    二、新建模型文件(具体内容看ThinkPhp框架知识)

    (1)找到模块文件夹中的Model文件夹,然后在这个文件夹新建模型文件

    a)         model本身就是一个类文件

    b)        数据库中的每个数据表都对应一个model模型文件

    c)         最简单的数据model模型类

    自己的模型文件

    <?php
    namespace HomeModel;   //命名空间的写法
    use ThinkModel;          //使用模型
    class InfoModel extends Model
    {
    	
    }
    

     (2)看下这个数据模型

    我们可以再控制器文件夹中进行编写控制文件,这里有了一个控制文件,我就用这个了

    打开控制文件,然后写个方法,这里叫做ceshi()

    public function ceshi()
    {
      $info = new HomeModelInfoModel();  //造新对象,这里是Info模型
      var_dump($info);  //输出一下,看下结果
    		
    }
    

    输出看一下结果,注意这里地址栏的写法(在框架知识中已经介绍过了4中访问方式了):

    这是我的路径:     

    下面是对应的模型数据:

     三、对数据库进行各种查询(下面的是ThinkPHP模型基础类提供的“连贯操作方法”连贯操作方法)

    可以利用这个控制文件中的方法,就直接在这个方法中写了

    public function ceshi()
    {
      $info = new HomeModelInfoModel();  //造新对象,这里是Info模型
      //下面是数据库操作
    		
    }
    

     

    (1)查询表中的所有数据(方法:select())

    返回的二维数组(关联的)
    返回的数据其中的字段名称是小写,这样做数据库时尽量是小写的

    例如:

    $arr = $info->select();
    var_dump($arr);
    

    看下是不是查询的数据库中所有内容

       

    数据库中的内容:

       

    (2)查询一条数据(方法:find())

     例如:

    $arr = $info->find("p002");
    var_dump($arr);

    这是查询的:代号是"p002"的信息,如下:

    select()方法也是可以查询一条或是多条数据,如下:

    $arr = $info->select("p001,p002");
    var_dump($arr);
    

    这是查询的:代号是"p001"和"p002"的信息,如下:

    (3)条件查询数据(方法:where())

    $arr = $info->where("code='p003'")->select();
    var_dump($arr);  

     这是查询的条件:代号是p003的所有信息

    (4)切换数据表(方法:table())

    例如:

    $arr = $info->table("nation")->select();
    var_dump($arr);

    这是却换了一张nation表:

    (5)选择操作的字段(方法:field())

    例如:

    $arr = $info->field("name,sex,birthday")->select();
    var_dump($arr);

    查询字段是:姓名、性别和生日的字段

    (6)对数据进行排序(方法:order())

    例如:

    $arr = $info->order("code desc")->select();
    var_dump($arr);
    

    这是对code进行降序排列

    (7)分页查询数据(方法:limit()和page())

    例如:limit()

    $arr = $info->limit("2,2")->select();
    var_dump($arr);
    

    这是显示的第2页的内容:

    例如:page()

    $arr = $info->page("2,2")->select();
    var_dump($arr);
    

    这个也是显示的第2页的内容:

    注意:

    limit()和page()的不同之处:后者的参数是直接显示“第几页”,“几条”

    (8)对数据进行分组(方法:table())

    例如:

    $arr = $info->table("car")->field("max(price)")->group("brand")->select();
    var_dump($arr);
    

    这是查询的car表中的最大价格,并且根据brand的字段进行分组

    例如:

    $arr = $info->table("car")->field("max(price)")->group("brand")->having("max(price)>60")->select();
    var_dump($arr);
    

    这是上面的那个查询,但是加了一个条件就是价格大于60的

    (9)链接查询数据库(方法:join())

    例如:

    $arr = $info->field("info.code as '代号', info.name as '姓名',nation.name as '民族'")->join("nation on info.nation=nation.code")->select();
    var_dump($arr);
    

    这是链接查询的两张表(汉语的地方最后用字符,因为后面要用到他的值)

    (10)去重(distinct())

    例如:

    $arr = $info->table("car")->distinct(true)->field("brand")->select();
    var_dump($arr);
    

    这是查询的数据库中重复的字段

    到此,就是关于怎么连接数据库和各种查询数据库中的数据,这是基本操作,下面就是对数据的添加、修改、删除操作了

    四、对数据表添加数据(方法:add())

    (1)上一篇已经讲过链接数据库了,继续进行对数据库的操作,还是用控制器文件中的HomeController.class文件

    看下数据库表中的现有数据,然后在进行添加数据

    添加数据有三种方法

    其中第一种和第二种的添加数据方法不用判断语句,直接找到表然后进行编写就可以

    public function tianjia()
    {
        $n = M("nation");	
      //下面就是第一种和第二种添加的方式 }

    1.使用数组方式添加

    //1.使用数组方式添加
    $arr = array("Code"=>"n006","Name"=>"哈喽");  //其中的字段名要和数据库中的要保持一致
    $n->add($arr);  //进行添加数据,方法add()
    		
    

    运行一下这个方法,注意地址栏要使用正确的路径(这是我的路径):http://localhost/tp/index.php/Home/Home/tianjia 

    看下数据库表中是否添加了数据

    2.AR方式

    赋一下值(给字段赋值然后在添加)

    //2.AP方式
    $n->Code = "n007";  //赋值的方式将每个字段赋值
    $n->Name = "你好";
    $n->add();  //最后用添加方法的时候里面就不用写参数了
    

    运行看下数据库表中的变化

    3.自动收集表单(最简单的方式)

    注意事项:
    (1)表单中的name要和数据库中的字段名统一
    (2)多余的表单可以自动取名,只要不和数据库字段名一样就可以

    就要考虑这个操作方法要实现什么逻辑,要是两个逻辑

    1.显示页面
    2.添加数据

    这里可以通过if判断语句来实现:如果是空的,就显示页面

    if(empty($_POST))
    {
        $this->show();	  //显示页面
    }
    

    否则就是添加数据的代码,一步步的来,先说显示页面,既然是显示页面就要在视图文件夹添加显示页面了

      1.1.打开View文件夹,然后新建文件夹,名字和控制器的名字一样

      1.2.然后在Home文件夹中新建一个显示页面,这里我叫的是tianjia.html,打开这个页面,进行编写要显示的内容

    这里我是用的表单元素来写的显示页面

    <form action="__ACTION__" method="post">  <!--这个中的ation属性使用的__ACTION__(当前操作方法),也可以使用__SELF__(自身的操作方法)系统常量-->
      <!--注意下面的name名字要和数据中的保持一致--> <div>代号:<input type="text" name="Code" /></div> <br /> <div>名称:<input type="text" name="Name" /></div> <input type="submit" value="添加" /> </form>

    注意:

    这样,我们访问一下,看看是不是能够看到这个页面  

    打开浏览器,在地址栏中输入访问方法

    http://localhost/tp/index.php/Home/Home/tianjia

    看下这个页面的显示效果

    显示页面成功后就是添加数据的编写了

      2.1这个就是判断中的“否则”的语句了

    else
    {
        $n = M("nation");	
        $n->create();   //自动收集表单数据
        $n->add();  //添加到数据库中
    }			
    

    运行一下看下是不是可以自动收集表单内容

    (1)第一步还没有内容时,自然是显示页面了

    (2)添加一下内容,数据库表中没有的数据,单击提交按钮

    (3)看下数据库是不是已经添加进去了

    如果是添加错误想要修改数据,可以这样

    先收集表单元素,然后觉得哪一项不对,找到这一项然后修改就可以了

    $n->create();   //先收集
    $n->Name = "hhah";    //修改名字这个吧
    $n->add(); 	//再添加到数据库
    

    看下运行效果:

    先收集表单,单击提交按钮

    在看修改的内容,是修改名称这个改为hhah,看下数据库是不是在提交时修改了名称,是的,他修改了

    五、修改数据库中表的数据(方法:save())

    其实这个和添加差不多,也是有三种方法

    这里也是在HomeController.class文件中继续编写修改方法

    public function xiugai()
    {
      $code = "n009"; //修改数据当然是用到的主键值 $n = M("nation"); //因为要修改数据,所以要用到数据库,这里调用数据   //下面就是修改的方法 }

    (1)1.还是用if判断一下

    if(empty($_POST))
    {
      $arrt = $n->find($code);   //利用find()方式读取一条数据,里面的参数自然就是主键
    
      $this->assign("shuju",$arrt);  //注入变量了,注意这里是$this不是别的
      $this->show();	  //显示页面
    }
    

      

    2.接下来就是做修改的模板页面了,名字就叫xiugai.html吧

    <form action="__ACTION__" method="post">
        <div>代号:<input type="text" name="Code" value="{$shuju.code}"/></div>   <!--显示的默认值就是上面的二维数组中的shuju-->
        <br />
        <div>名称:<input type="text" name="Name" value="{$shuju.name}" /></div>
        <input type="submit" value="修改" />
    </form>

    看下结果

    (2)这个就是修改的“否则”语句了

    修改也是有三种方式

    1.数组方式

    //1.数组方式
    $n->save($_POST);  //修改方法save()
    

    因为已经有了数组,所以直接调用就可以了  

    2.AR方式

    //2.AR方式
    $n->Code = $_POST["Code"];
    $n->Name = $_POST["Name"];
    $n->save();
    

    3.自动收集表单

    //3.自动收集表单
    $n->create();   //自动收集表单数据
    $n->save();
    

      3.1修改一下数据试试

      3.2将上面的值修改为下图所示,然后单击“修改”按钮

      3.3看下数据库是不是修改了,原来是hhah,修改为:维吾尔族

    修改成功了~~

    六、删除数据库表中的数据(方法:delete())

    同样的继续写一个方法,这里就叫shanchu()吧

    public function shanChu()
    {
        $n = M("nation");
        $n->delete("n008");  //删除的是n008的数据,删除的方法:delete()
    }
    

    看下数据库这个n008的数据  

    执行一下这个方法,然后看下数据库中的数据

    n008的这条数据已经被删除了

    到现在对于数据库的修改数据就已经完事了,正常的增删改功能就这么些内容

    需要记住:注意事项

    添加修改都是三种方式,还是同样的方式(方法不同而已)

    上面都是有关数据库的基本操作,查询,增删改操作,想要操作数据库,第一点就是要连接数据库!!

  • 相关阅读:
    数学+高精度 ZOJ 2313 Chinese Girls' Amusement
    最短路(Bellman_Ford) POJ 1860 Currency Exchange
    贪心 Gym 100502E Opening Ceremony
    概率 Gym 100502D Dice Game
    判断 Gym 100502K Train Passengers
    BFS POJ 3278 Catch That Cow
    DFS POJ 2362 Square
    DFS ZOJ 1002/HDOJ 1045 Fire Net
    组合数学(全排列)+DFS CSU 1563 Lexicography
    stack UVA 442 Matrix Chain Multiplication
  • 原文地址:https://www.cnblogs.com/nuanai/p/6537888.html
Copyright © 2011-2022 走看看