【问题标题】:Prevent Duplicate Entry using php and mysql in codeigniter在 codeigniter 中使用 php 和 mysql 防止重复输入
【发布时间】:2017-02-16 08:33:29
【问题描述】:

您好,我无法在数据库中插入跟踪号。似乎在某些情况下它会生成一个重复的条目。我正在根据我的 first_track 表中的最后一个条目生成跟踪号,并将其增加 1。现在我的问题是,当用户同时点击时。它会生成相同的跟踪号。我该如何预防?顺便说一句,这是我生成跟踪号的代码。我还将每个月的第一个条目返回到 0001。

<!----------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);

【问题讨论】:

  • 你想生成序列格式的轨道ID或任何随机的否?
  • 我想每月增量生成它。例如,对于 2017 年 1 月,第一个条目是 17010001,那么 1 月的下一个条目是 17010001+1。 17 是年份,01 是月份,接下来的 4 位数字是每个月的跟踪号计数
  • 所以当多个用户同时提交时,您是代码重复?
  • 是的。这是我的主要问题。 2 个不同的用户同时提交条目,或者每隔几秒钟提交条目。

标签: php mysql codeigniter activerecord


【解决方案1】:

首先,为了确保您不会在数据库中获得重复值,请确保您索引(将其设置为唯一)在表 first_track 中保存跟踪号的列(“first_trackid”)。

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

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

问候

【讨论】:

  • 您好,谢谢您的回答。我所做的是在用户提交输入后生成跟踪号,但仍有一段时间它会生成重复的跟踪号。
  • 列是否以“唯一”模式索引?如果已定义,那么当您尝试保存有时会重复的代码时(如您所说),您可以捕获 mysql 异常。一旦捕获到异常,重新生成一个新的跟踪号并再次保存记录。
  • 看起来我忘了使该字段独一无二。我会努力按照你说的去做。谢谢!将投票给这个答案。
  • 嗨。看起来它捕获了重复的条目。现在我的问题是如何在错误之后增加值,以便我们可以插入记录。
  • 一旦,您可以捕获异常,在异常处理部分,增加跟踪 ID 或从数据库中获取新的跟踪号,并使用该跟踪号更新您的记录。如果这没有帮助,请尝试通过触发器在数据库中生成跟踪号,并让 MySQL 为您完成。您可以稍后使用您的模型检索更新的跟踪号,并在保存记录后显示给用户。尝试在“For EACH Row”模式下使用“BEFORE INSERT”触发器(行级触发器)。
猜你喜欢
  • 2018-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-27
  • 2019-12-04
  • 1970-01-01
相关资源
最近更新 更多