如何避免在codeigniter中重复插入表?

时间:2018-03-02 04:53:28

标签: php mysql codeigniter

这似乎是一个老问题,但我没有找到任何正确解决我问题的方法。我将解释我面临的问题。

在我的代码部分中,我在插入之前检查了表,表是否已经具有特定列的值。

select vid from mytable where vid=$vid;

如果vid值不存在,那么我必须在mytable中执行插入查询,否则无需插入。

但问题在于某些情况如何,在某些情况下,已经向应用程序发送了同步请求,并且上述代码已被执行了一次以上。所以同一个视频有一些重复的条目。我该如何防止这个问题。我可以使用begintransaction和endtransaction方法,还是有可用的锁方法?。

除了key之外,在创建表时没有为vid设置约束。该表有500万条记录。因此无法进行约束更新。

2 个答案:

答案 0 :(得分:0)

是的,您可以使用非常简单的逻辑来完成此操作。 请按照以下步骤操作

  • 检查项目是否存在于表格中
  • 如果存在则生成错误

在代码点火器中,所有这些都将在模型中完成

<强>控制器

$array = array("database column name" = $vid) // make that array according to you database
$this->modle_class_name->data_checker($array);

<强>模型

// check whole row in database
public function data_checker($info_check){
    $this->db->select("*");
    $this->db->from("table name");
    $this->db->where($info_check); // will check whole row in database
    $this->result = $this->db->get();

    if($this->result->num_rows() > 0){
       // you data exist
       return false;
    } else {
       // data not exist insert you information
       $this->db->insert("table name", $info_check);
       return true;
    }
}

OR

<强>模型

// check row by column in database
public function data_checker($info_check){
    $this->db->select("*");
    $this->db->from("table name");
    $this->db->where("column name", $info_check["column name"]); // will check row by column name in database
    $this->result = $this->db->get();

    if($this->result->num_rows() > 0){
       // you data exist
       return false;
    } else {
       // data not exist insert you information
       $this->db->insert("table name", $info_check);
       return true;
    }
}

我希望这能解决你的问题。因为这适合我。

答案 1 :(得分:0)

你只需要制作字段&#34; vid&#34;在你的表中是唯一的:

ALTER IGNORE TABLE mytable ADD UNIQUE (vid);

对于MySQL 5.7.4或更高版本:

ALTER TABLE mytable ADD UNIQUE (vid);