thinkphp mysql desc table_Thinkphp 连接数据库、查询、添加

本文介绍了Thinkphp连接数据库、创建Model模型、实例化Model的多种方式,以及数据查询和添加的方法。通过示例详细讲解了如何使用D()和M()方法进行数据表操作,包括查询、分页、条件筛选、排序、分组等。还展示了如何在页面展示查询结果以及数据添加的数组和对象方式,以及表单数据收集入库的操作流程。
摘要由CSDN通过智能技术生成

一、连接数据库配置及Model数据模型层

1. Thinkphp\conf\convertion.php中找到数据库设置部分,复制到自己的配置文件中,并添加好有关数据库的内容

JiaoWu\Home\conf\config.php:

e92fcaf2f7ef7e5491d20339e85d7210.png

2. 制作model模型

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

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

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

在Home\Model文件夹中新建一个模型文件:InfoModel.class.php

61a54e8d2e6ec2f02907120d0fd9bfc0.png

namespace Home\Model;useThink\Model;class InfoModel extendsModel

{

}

3. 实例化Model的三种方式:

$goods =  new  命名空间GoodsModel();

$goods = D(‘模型标志’);

a)   $goods = D(“Goods”);

b)   该$goods是父类Model的对象,但是操作的数据表还是sw_goods

c)   $obj = D();  实例化Model对象,没有具体操作数据表,与M()方法效果一致

$obj = M();

a)   实例化父类Model

b)   可以直接调用父类Model里边的属性,获得数据库相关操作

c)   自定义model就是一个空壳,没有必要实例化自定义model

d)  $obj = M(‘数据表标志’);  实例化Model对象,实际操作具体的数据表

$obj = D(标志);

$obj = D();

$obj = M(标志);

$obj = M();

D()和M()方法的区别:

1. 前者是tp3.1.3里边对new操作的简化方法;

2. 后者在使用就是实例化Model父类

3. 两者都在函数库文件定义ThinkPHP/Common/functions.php

注意:如果没有对应的model模型文件类,也可以直接实例化model对象进行操作

D()和M()方法都可以实例化操作一个没有具体model模型类文件的数据表。

functionShowAll()

{//Model:数据库中每张表对应一个模型

//类名是表名,类里面的成员变量是列名

//把一张表对应为一个类,其中一条数据对应一个对象

//如果我们对该表的模型没有特殊操作的话可以不用建立该模型

//1.实例化model类

$info=new\Home\Model\InfoModel();//var_dump($info);

//2.使用D()方法

$info = D("Info");//var_dump($info);

//3.使用M()方法

$car=M("Car");//var_dump($car);

二、数据查询

select()是数据模型的一个指定方法,可以获得数据表的数据信息

返回一个二维数组信息,当前数据表的全部数据信息

$obj = D();  创建对象

查询常使用的方法:

$obj -> select();  查询数据,使用select()会返回一个二维数组

$obj -> field(字段,字段);  查询指定字段

$obj -> table(数据表);   设置具体操作数据表

$obj -> where(参数);   参数就是正常sql语句where后边的条件信息

例如:( “goods_price >100 and  goods_name like ‘三%’”)

$obj -> group(字段);  根据字段进行分组查询

$obj -> having(参数条件);  having 条件设置

$obj -> order(‘price  desc/asc’)  排序查询

$obj -> limit([偏移量,]条数)  限制查询的条数

$obj ->page()分页类Page可以自动计算出每个分页的limit参数

例如:$obj->page("1,10")->select();// 查询第一页数据

$obj->page("2,10")->select();// 查询第二页数据

$obj ->find():如果我们查询的结果只有一个信息,为了使用方便我们会希望返回一个一维数组,这时候可使用find()方法

相关聚合函数:count()  sum()   avg()   max()   min()

以上聚合函数是最后被调用的方法

以上方法可以结合具体条件方法使用

例如:$goods -> where(‘goods_price >1000’)->count(); 大于1000元的商品的总数目

//汽车表Car

$car=M("Car");var_dump($info->select());//返回所有数据的二维数组 //使用TP框架时,建表是表名和列名最好都用小写

$attr=$car->where("brand='b002'")->select();//where方法可以添加查询条件

$attr=$car->table("Nation")->select();//table方法可以切换操作表

$attr=$car->field("name,code")->select();//指定查询的字段

$attr=$car->order("oil desc")->select();//排序

$attr=$car->limit(2,2)->select();//分页查询,如果是一个参数是取前n个数据,两个数据是跳过几个取几个

$attr=$car->page(3,2)->select();//分页查询,可以取第几页的n条数据

$attr=$car->field("brand,count(*)")->group("brand")->select();//分组查询

$attr=$car->join("brand on car.brand=brand.brand_code")->select();//连接查询

$attr=$car->distinct(true)->field("brand")->select();//distinct(true)去重

$attr=$car->find("c001");//查一条数据,只根据主键值查,返回一维数组,不写主键值默认返回第一条

$attr=$car->select();//根据主键值查多条数据,返回二位数组,

$attr=$car->where("name like '%奥迪%'")->order("powers desc")->select();//var_dump($attr);

//聚合函数:可以放在最后

$attr=$car->count();$attr = $car->avg("Price");echo $attr;

自己拿Info表做的练习:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 //info表

2 $info=M("Info");3 var_dump($info);4 $attr=$info->select();5 $attr=$info->where("nation='n001'")->select();6 $attr=$info->table("Nation")->select();7 $attr=$info->field("sex,birthday")->select();8 $attr=$info->order("birthday")->select();9 $attr=$info->field("nation,count(*)")->group("nation")->select();10 $attr=$info->limit(1,2)->select();11 $attr=$info->page(2,3)->select();12 $attr=$info->join("nation on Info.Nation=Nation.Code")->select();13 $attr=$info->distinct(true)->field("birthday")->select();14 $attr=$info->find("p010");15 $attr=$info->select("p010,p120");16

17 var_dump($attr);

View Code

如何在页面显示查询出的表格内容:

1. 在MainController.class.php控制器中写一个方法,实例化model,查询info表内容,然后注册到前端

functionShowAll()

{$info=M("Info");$attr=$info->select();$this->assign("shuju",$attr);$this->display();

}

2.在View\Main中新建:ShowAll.html

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1

2

3

4

5

无标题文档

6

7

8

9

信息查询

10

11

12

代号

13

姓名

14

性别

15

民族

16

生日

17

18

19

20

21

22

23

24

25

26

27

28

29

30

View Code

3.运行结果:

77e47966c479b787815d87148bbb8e42.png

三、数据添加

add() 该方法返回被添加的新记录的主键id值

三种方式实现数据添加

1. 数组方式数据添加

$goods = D(“Goods”);

$arr = array(‘goods_name’=>’iphone5s’,’goods_weight’=>’109’);

//注意:goods_name和goods_weight是数据表中字段名称

$goods -> add($arr);

functionAdd()

{//1.数组添加数据

//要添加的数组,必须是关联数组,key必须为字段名称

//方式一:

$model=D("Info");$attr=array("Code"=>"p100",

"Name"=>"ww",

"Sex"=>true,

"Nation"=>"n001",

"Birthday"=>"1999-01-01");//方式二:

$attr["Code"]="p111";$attr["Name"]="小豪";$attr["Sex"]=false;$attr["Nation"]="n003";$attr["Birthday"]="1993-08-20";$model->add($attr);//添加数据的方法。需要参数,该参数是关联数组

}

2.  AR方式实现数据添加

a)         ActiveRecord  活跃记录

b)        AR规定了程序与数据库之间的关系

c)         什么是AR:

d)       ① 一个数据表对应一个类model

e)         ② 一条数据记录对应类的一个对象

f)         ③ 每个字段对应该对象的具体属性

g)        tp框架的AR是假的

$goods = D(“Goods”);

$goods -> goods_name = “htc_one”;

$goods -> goods_price = 3000;

$goods -> add();

以上两种方式:数组、AR,最后add都要把新记录的主键id值返回

functionAdd()

{//2.AR方式实现数据添加(对象方式)

//1.连接类 2.实体类 3.数据访问类

$model=D("Info");$model->Code="p120";$model->Name="yuyu";$model->Sex=true;$model->Nation="n004";$model->Birthday="1999-9-9";$model->add();

}

3. 收集表单数据入库操作

制作一个表单

通过$_POST收集信息

通过create()方法实现数据收集,该方法对于非法的字段会自动进行过滤

注意:一个add控制器实现两个逻辑,一个是打出添加页面,一个是向数据库添加内容

通过一个例子来说明:

1. 在MainController.class.php控制器中写一个方法来接收并向数据库添加数据

functionAll()

{if(empty($_POST))

{$nation=M("nation");$attr=$nation->select();$this->assign("shuju",$attr);$this->display();

}else{$model=D("Info");$model->create();//自动收集表单数据入库

$model->Sex=$_POST["Sex"]=="1"?true:false;$r=$model->add();if($r)

{//添加成功跳转页面

$this->success("添加数据成功!","Add",5);//5代表跳转时间,默认是3秒

}else{//添加失败跳转页面

$this->error("添加数据失败!","Add",5);

}

}

2.在View\Main中新建:ShowAll.html

无标题文档

添加数据

代号:
姓名:
性别:男女
民族:
生日:

279d5b1d4c562220f7ccf33be93cf2b8.png

3.运行结果:

若添加成功:

7c1b17051844f60b93b199a0c4af7e58.png     ==>  

77eb9286ed357b5a834bc33970858019.png    ==>

ed1f8b9c59246fbef57bd0ff5dc4daea.png

若添加不成功:

08f448cd07cadbbdd8e1705bcd34538a.png    ==>      

77c664a7b674348722ca8ce6e8fe2105.png

注意:如果是主键值重复,这种错误会导致error()方法不跳转页面直接抛出错误信息,这是新版本问题,如果想要跳转,找到

b013742a6762dd8eb8608ee9cb518fe3.png

65480d5faeb887522dba4ba7393db88b.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值