(一)在插入数据前,对数据库中的数据进行检查,并返回插入信息

来源:互联网 发布:翻倍牛股指标源码 编辑:程序博客网 时间:2024/06/05 05:46

问题背景:使用的是thinkPHP5.0框架下封装的的链式操作方式。

问题描述:接口要求,在传入参数后,首先检查class中是否存在相关班级,如果存在则在stu_class表中插入一条申请信息,如果不存在就不插入,并返回插入成功与否的有关信息。

数据库字段:

stu_class

class:



思路过程:

(1)对于检查数据是否存在,我另外写了一个相关的查询使用读入的参数,在表格中搜索,并统计数量,因为class表项中不存在重复的数据,所以count只会返回0(表示没有数据),1表示这个数据是存在的,然后写了一个判断语句,之后在表中有相关数据时,才会插入数据

(2)需求要求返回插入是否成功的有关信息,因为这个stu_class表也是不允许重复插入,所以有时会插入失败,在面对这个问题的时候,我首先希望使用mysql自带的返回值来解决这个问题,因为在插入的时候会返回一个变动的条目信息,这里这个接口调用一次之后插入一次信息,如果插入成功应该就会返回1,插入失败就应该返回0,但是实际操作中出现了一个问题,就是在插入失败之后thinkPHP会直接报错,并不会返回0。于是我就想着使用try catch捕捉这条错误的信息,但是失败了,后来查阅官方文档我发现原来是因为在thinkPHP中catch中应该是\Exception $e,而不是Exception $e,正是这点差异使得我反复调试失败,修改过来之后,代码就跑通了。

代码实现:

public function handle($stuid='',$claid=''){    $data0 = Db::table('class')    ->where('id',$claid)    ->count();    if($data0){        try {            $data1 = ['stuid' => $stuid, 'claid' => $claid,'state'=>'0'];            $request=Db::table('stu_class')->insert($data1);            //$request = Db::name('cen_class')->getLastInsID();            return 1;        } catch (\Exception $e) {            return 0;        }    }else{        return 2;    }    }
代码解释:class表中无相关数据时,会返回2;插入失败会返回0,插入成功会返回1。

阅读全文
0 0