2017-02-16 32 views
0

您好,我在数据库中插入跟踪号码时遇到问题。它似乎在某些情况下会生成重复的条目。我在first_track表的最后一个条目上生成跟踪编号,并将其增加1.现在我的问题是,当用户同时点击时。它会生成相同的追踪号码。我如何防止它?顺便说一句,这里是我的代码在生成跟踪号码。我每个月的第一次入场时也会返回0001。防止在codeigniter中使用php和mysql重复输入

<!----------Model--------> 
      $this->db->order_by("first_trackid", "desc"); 
     $query = $this->db->get('first_track'); 
     if($query->num_rows() > 0) 
     { 
      $result = $query->result(); 
      if(date('m') != substr($result[0]->dtsno,2,2)){ 
       $dtsno = date('ym').'0001';     
       } 
      else{ 
       $dtsno = $result[0]->dtsno+1; 
      } 
      return $dtsno; 

     } 
     else 
     { 
      return $dtsno = date('ym').'0001';     
     } 
<!--- END model-------> 
<!---controller-----------> 
//call the model for generating dtsno 
$firsttrack->dtsno = $this->user_information_model->dtsno(); 
//insert to table first_entry 
$this->user_information_model->first_track($firsttrack); 
+0

你想生成串行格式的轨道ID或任何随机没有? –

+0

我想每月增加一次。例如2017年1月,第一个入口将是17010001,那么1月的下一个入口将是17010001 + 1。 17将是年份,01将是月份,那么接下来的4位数字将成为每月跟踪数量的计数 – PiDO

+0

因此,当多个用户同时提交时,您是代码复制? –

回答

1

首先,为了确保您不会在数据库中得到重复值,使得其持有的查询号码务必指数(将其设置为唯一的)列(“first_trackid”)表first_track。

其次,你使用基于时间戳的临时轨道序列号,当用户启动程序。

实际发电跟踪号码,当用户去完成整个过程,或者换句话说应该发生的,保存记录。那时,生成该号码并相应地显示给用户。这样,您可以确保这些值永远不会在您的模式中重复。

Regards

+0

嗨,谢谢你的回答。我做了什么是我在用户提交输入后生成跟踪号码,但仍然有一段时间它会生成重复的跟踪号码。 – PiDO

+0

是否使用“唯一”模式索引列?如果定义了它,那么当你试图保存有时会重复的代码时(如你所说),你可以捕获mysql异常。一旦发现异常,重新生成一个新的追踪号码并再次保存记录。 –

+0

看起来我忘了让这个领域独一无二。我会尽力按你所说的去做。谢谢!将投票答复。 – PiDO