2017-02-16 50 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