网站已经改版为Wordpress版本,这里是旧版本的快照,请不要在页面中留言.

ThinkPHP Add()函数添加记录判断记录已经存在

本文出自悠然品鉴小悠,转载请注明出处http://www.youranshare.com/blog/sid/105.html

之前在写网站的时候碰到一个问题,向数据库中插入记录的时候,对于unique类型的字段如果插入已经存在的记录值会出现错误: "SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry”,我想了一下之前做的工程,我的解决方案是先查询一下数据库,判断一下数据库中是否存在要插入的字段值,然后在执行Add方法将数据插入,这种方法虽然也可以,但是多了一次数据库的查询操作,不利于网站的优化;今天下午我再次遇到了这种问题,因为这次的数据库关系较为复杂,多一次数据判断就增加了服务器的压力,经过一番研究找到了一种较为方便的方法,这里就记录一下.

我用一个例子来说明一下:

首先创建一个数据表

create table yz_test(
       id int auto_increment,
       user varchar(32) unique,
       PRIMARY KEY (id)   )

这个数据表中 user字段是不能重复的,我们首先插入一个记录:

public function Test(){
   $Model = M("test");
   $Data["user"]="user1";
   $Model->add($Data);
}

我们第一次执行,没有问题,结果如下图:

                                             


我们再次执行,这个时候就会看到错误,原因就是user字段是unique的属性,如图所示我们的错误信息:

报了一个SQLSTATE[23000]的错误,注意错误代码是23000,我们可以根据这个错误代码做写文章,下面是我判断这种错误的方法:

public function Test(){
   $Model = M("test");
   $Data["user"]="user1";
   $Ret =-1;//操作的返回值
   try{
     $Ret = $Model->add($Data);//注意:如果Add有异常,$Ret的值不会被修改
   }catch(\Exception $e){
     if($e->getCode()==23000){
       echo "插入的数据Unique导致的错误";
       die();
     }
   }
   echo "创建成功";
}

我用try catch捕获异常,提取错误代码,根据错误代码就知道了错误的愿意,从而就能一次判断数据是否能够插入了.


  • 标签:
  • SQLSTATE[23000]
  • ThinkPHP
  • Unique字段
网站已经改版为Wordpress版本,这里是旧版本的快照,请不要在页面中留言.