# 插入数据 确切的说,我们在这里将展示如何将一个数组插入到数据表中。 假设将下面这样一条数据,插入到数据表中。 ~~~ $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)