# 插入数据
确切的说,我们在这里将展示如何将一个数组插入到数据表中。
假设将下面这样一条数据,插入到数据表中。
~~~
$teacher = array();
$teacher['name'] = '王五';
$teacher['username'] = 'wangwu';
$teacher['sex'] = '1';
$teacher['email'] = 'wangwu@yunzhi.club';
~~~
## 新建action (function)
是的,我们通常将controller中的function,叫做action、触发器,以后我们都将这样叫下去。如果我们说触发器,那么它肯定是某个模块下的某个控制器中的一个方法。如下所示:
~~~
public function insert()
{
return 'hello insert';
}
~~~
测试结果如下图所示:
![](https://box.kancloud.cn/c306772e0881782d8cb41fa918ea04f6_376x79.png)
如图,我们新建了一个insert触发器,用来实现数据添加的功能。
~~~
git checkout -f step3.3.1.1
~~~
执行上述命令后,上述示例代码信息如下:
![](https://box.kancloud.cn/545490256e4f7e47586c1ae4f017901f_948x615.png)
> 再次强调:测试很关键,每一步都需要非常的清晰的明了现在是哪个URL,这个URL又将触发哪个类中的哪个方法。同时,必须要测试出,是否我们认为的这个URL,就是触发的我们认为的那个方法,而最终的验证环节,就是我们的测试。
## 整理思路
~~~
public function insert()
{
// 新建测试数据
// 引用teacher数据表对应的模型
// 向teacher表中插入数据并判断是否插入成功
}
~~~
在完成一个功能之前,或是我们在编码之前,做的事情,先是要写注释,把整个流程以注释的形式非常清楚的摆在眼前,然后再进行编码。
## 新建测试数据
~~~
public function insert()
{
// 新建测试数据
$teacher = array(); // 这种写法也可以 $teacher = [];
$teacher['name'] = '王五';
$teacher['username'] = 'wangwu';
$teacher['sex'] = '1';
$teacher['email'] = 'wangwu@yunzhi.club';
var_dump($teacher);
// 引用teacher数据表对应的模型
// 向teacher表中插入数据并判断是否插入成功
}
~~~
测试结果如下图所示:
![](https://box.kancloud.cn/ebffb65ee34b3e527c7c17e40baa52fa_573x173.png)
~~~
git checkout -f step3.3.1.2
~~~
执行上述命令后,上述示例代码信息如下:
![](https://box.kancloud.cn/cdcc564441c2ae9b8976509647204b63_923x593.png)
## 引入teacher表对应的模型
由于我们已经use过Teacher模型,所以这次可以直接进行使用。
~~~
public function insert()
{
// 新建测试数据
$teacher = array(); // 这种写法也可以 $teacher = [];
$teacher['name'] = '王五';
$teacher['username'] = 'wangwu';
$teacher['sex'] = '1';
$teacher['email'] = 'wangwu@yunzhi.club';
var_dump($teacher);
// 引用teacher数据表对应的模型
$Teacher = new Teacher();
var_dump($Teacher);
// 向teacher表中插入数据并判断是否插入成功
}
~~~
测试结果如下图所示:
![](https://box.kancloud.cn/ce50174681db2a8ea789400f94508a4f_613x486.png)
## 插入数据
~~~
public function insert()
{
// 新建测试数据
$teacher = array(); // 这种写法也可以 $teacher = [];
$teacher['name'] = '王五';
$teacher['username'] = 'wangwu';
$teacher['sex'] = '1';
$teacher['email'] = 'wangwu@yunzhi.club';
// 引用teacher数据表对应的模型
$Teacher = new Teacher();
// 向teacher表中插入数据并判断是否插入成功
$state = $Teacher->data($teacher)->save();
var_dump($state);
}
~~~
测试结果如下图所示:
![](https://box.kancloud.cn/1abae1a1948a87ac4351bfec2c439480_530x67.png)
我们看到返回的是一个数字 1,是的,如果插入成功,则会返回成功插入的条数。
在开发模式下,我们认为,只要未抛出异常,那么就是插入成功。
~~~
git checkout -f step3.3.1.3
~~~
执行上述命令后,上述示例代码信息如下:
![](https://box.kancloud.cn/87c8164c61be9d904b61cbd645468643_899x635.png)
### 测试错误
有正确的添加数据,就必然有错误的添加数据。当错误添加数据时,会报什么错误呢?
现在我们将email更改为email1:
~~~
$teacher['email1'] = 'wangwu@yunzhi.club';
~~~
执行结果如下图所示:
![](https://box.kancloud.cn/635e17e528e9a964271e49a822c92f7c_713x355.png)
是的,当我们看到上面的错误时,大多是在代码中输入了数据字段名,由这个字段名在实际的数据表中并不存在。所以以后再看到类似错误时,一下就能知道问题出现在哪了吧。
## 去除测试代码,并定制提示信息
最终的软件,当然是给用户使用的。这就要求我们需要站在用户的角度上去思索,用户到底需要什么样的软件,需要什么样的交互。
在这里,用户并不关心变量的值是什么,他们只关心用户是否被直接添加了。
代码定制如下:
~~~
public function insert()
{
// 新建测试数据
$teacher = array(); // 这种写法也可以 $teacher = [];
$teacher['name'] = '王五';
$teacher['username'] = 'wangwu';
$teacher['sex'] = '1';
$teacher['email'] = 'wangwu@yunzhi.club';
// 引用teacher数据表对应的模型
$Teacher = new Teacher();
// 向teacher表中插入数据并判断是否插入成功
$Teacher->data($teacher)->save();
return $teacher['name'] . '成功增加至数据表中';
}
~~~
测试结果如下图所示:
![](https://box.kancloud.cn/2016-06-14_575f894a665be.png)
~~~
git checkout -f step3.3.1.4
~~~
执行上述命令后,上述示例代码信息如下:
![](https://box.kancloud.cn/e5bf4c284e7eda33bb1cfb0d07accd5f_901x652.png)
## 面向对象
**一切皆对象** ---- 插入(新增)数据时也同样如此。下面,我们使用面象对象的思想,重写数据的插入操作。
~~~
public function insert()
{
// 实例化Teacher空对象
$Teacher = new Teacher();
// 为对象的属性赋值
$Teacher->name = '王五';
$Teacher->username = 'wangwu';
$Teacher->sex = '1';
$Teacher->email = 'wangwu@yunzhi.club';
// 执行对象的插入数据操作
var_dump($Teacher->save());
return $Teacher->name . '成功增加至数据表中。新增ID为:' . $Teacher->id;
}
~~~
测试结果为:
![](https://box.kancloud.cn/8899f5113bc0970872b74f00428b9a70_619x110.png)
> 没错,面象对象简单来讲,就是:先实例化一个对象,然后在这个对象上进行操作。
相信聪明的你还可以轻松的想到,数据的删除、更新也是如此。先有对象,后有操作。
去除测试信息:
~~~
public function insert()
{
// 实例化Teacher空对象
$Teacher = new Teacher();
// 为对象的属性赋值
$Teacher->name = '王五';
$Teacher->username = 'wangwu';
$Teacher->sex = '1';
$Teacher->email = 'wangwu@yunzhi.club';
// 执行对象的插入数据操作
$Teacher->save();
return $Teacher->name . '成功增加至数据表中。新增ID为:' . $Teacher->id;
}
~~~
~~~
git checkout -f step3.3.1.5
~~~
执行上述命令后,上述示例代码信息如下:
![](https://box.kancloud.cn/1d5c1e4623917add9bcd2a9c8638c7fa_1062x500.png)
- 序言
- 第一章 准备知识
- 第一节:XAMPP
- 第二节:NAVICAT
- 第三节:GIT
- 第二章 HelloWorld
- 第一节:下载THINPHP5.0
- 第二节:启动xampp
- 第三节:hello thinkphp
- 第四节:Hello world
- 第五节:MCA
- 第六节:单引号与双引号
- 第三章 教师管理
- 第一节:新建数据库
- 第二节:CURD之R 读数据
- 3.2.1 时序图
- 3.2.2 连接数据库
- 3.2.3 直接读取数据
- 3.2.4 间接读取数据
- 3.2.5 使用V层显示数据
- 3.2.6 引入bootstrap
- 3.2.7 加入bootstrap样式
- 第三节:CURD之 C 增加数据
- 3.3.1 插入数据
- 3.3.2 表单传值
- 3.3.3 存储表单数据
- 3.3.4 自动时间戳
- 3.3.5 增加验证
- 第四节:CURD之 D 删除数据
- 3.4.1 什么是关键字
- 3.4.2 删除数据
- 3.4.3 定制删除链接
- 3.4.4 完善删除
- 第五节:CURD之 U 更新数据
- 3.5.1 读取数据
- 3.5.2 展示数据
- 3.5.3 修改数据
- 3.5.4 传递数据
- 3.5.5 接收数据
- 3.5.6 更新数据 方法一
- 3.5.7 更新数据 方法二
- 第六节:衔接各个action & 重构代码
- 3.6.1 index action
- 3.6.2 add action
- 3.6.3 insert action
- 3.6.4 delete action
- 3.6.5 edit action
- 3.6.6 update action
- 第七节:分页
- 3.7.1 调用内置分页
- 3.7.2 select与paginate(选学)
- 3.7.3 分页原理(选学)
- 3.7.4 调用page(选学)
- 第八节:模糊查询
- 3.8.1 增加查询
- 3.8.2 完善查询
- 第四章 登录与注销
- 第一节:cookie 与 session
- 第二节:静态方法
- 第三节:规划URL跳转
- 第四节:登录
- 4.4.1 登录流程
- 4.4.2 index action
- 4.4.3 login action
- 4.4.4 引入M层
- 4.4.5 异常Exception
- 第五节:注销
- 第六节:验证
- 4.6.1 action增加验证
- 4.6.2 使用构造函数验证
- 4.6.3 使用继承验证
- 第五章 E-R图与数据字典
- 第一节:第一张E-R图
- 第二节:实体间的关系
- 第三节:开发规范
- 第六章 班级管理
- 第一节:建立数据表
- 第二节:数据列表index
- 第三节:增加数据add
- 第四节:编辑数据edit
- 第五节:删除数据delete
- 第七章 学生管理
- 第一节:建立数据表
- 第二节:数据列表
- 7.2.1 显示性别
- 7.2.2 显示创建时间
- 7.2.3 显示班级名称
- 7.2.4 显示辅导员姓名
- 第三节:编辑数据
- 第四节:魔法函数
- 第五节:源码分析
- 第八章 课程管理
- 第一节:建立数据表
- 第二节:新增课程
- 第三节:编辑课程
- 8.3.1 edit
- 8.3.2 update
- 第九章 代码重构
- 第一节:add 与 edit
- 第二节:insert 与 update
- 第三节:模板继承
- 9.3.1 index.html
- 9.3.2 edit.html
- 9.3.3 小结
- 第十章 UML图
- 第一节:E-R图回顾
- 第二节:UML图
- 第十一章 菜单与路由
- 第一节:添加菜单
- 第二节:虚拟主机
- 第三节:定制路由
- 第十二章 开发调试
- 第一节:开启trace
- 第二节:查看日志
- 第十三章:总结