Codeigniter 如果不存在则插入,如果不存在则更新

Posted

技术标签:

【中文标题】Codeigniter 如果不存在则插入,如果不存在则更新【英文标题】:Codeigniter insert if not exist and update if not 【发布时间】:2016-05-15 09:45:43 【问题描述】:

我有两个用于这些产品类别的表,一个用于存储产品类别,另一个是产品列表,当您插入新产品时,我将在其中插入产品,将有一个下拉列表可以从存储在产品上的类别中进行选择类别,但如果您想添加另一个类别,下拉菜单中有一个“其他”选项,并且会出现一个 textarea 并让您创建另一个类别我的问题是,如果我在数据库中添加一个具有现有类别的新产品,它不会插入这两个表,但如果我添加一个新类别的新产品,它会成功插入 我的控制器:

 function do_upload() 


    $config['upload_path'] = './assets/';
    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size'] = '2000';
    $config['max_width'] = '2000';
    $config['max_height'] = '2000';
    $config['new_image'] = './assets/';

    $config['overwrite'] = TRUE;
    $this->load->library('upload', $config);
    $this->form_validation->set_rules('name', 'Product Name', 'required|xss_clean');
    $this->form_validation->set_rules('description', 'Product Description', 'required|xss_clean');
    $this->form_validation->set_rules('price', 'Price', 'required');
    if (!$this->upload->do_upload() || !$this->form_validation->run()) 
        $error = array('error' => $this->upload->display_errors());
        redirect('add_products');
     else 

        $data = $this->upload->data();
        $this->thumb($data);

         $category = $_POST["prod_category"];
        if($category  == "2")
            
            $category = $_POST["other_category"];

            
        $file = array(
            'img_name' => $data['raw_name'],
            'thumb_name' => $data['raw_name'] . '_thumb',
            'ext' => $data['file_ext'],
            'product_name' => $this->input->post('name'),
            'product_description' => $this->input->post('description'),
            'product_price' => $this->input->post('price'),
            'product_category' =>$category,    


        );

         $this->db->insert("product_category",array("category"=>$category));
          $this->User->insert_prod($file);
        $data = array('upload_data' => $this->upload->data());
        echo '<script>alert("You Have Successfully Added a new Product!");</script>';
        redirect('admin_products','refresh');
    

型号

public function insert_prod($file)
        $this->db->insert('product_table',$file);
    

【问题讨论】:

不确定它是否有资格作为答案:andrea.codes/… 模式太冗长... 尝试使用它但似乎无法使其工作 【参考方案1】:

首先您需要检查用户或数据是否存在。然后就可以执行更新和插入操作了。

   $this->db->where('user_id',$id);
   $q = $this->db->get('profile');

   if ( $q->num_rows() > 0 ) 
   
      $this->db->where('user_id',$id);
      $this->db->update('profile',$data);
    else 
      $this->db->set('user_id', $id);
      $this->db->insert('profile',$data);
   

使用mysql查询还有另一种方法

   $query = 'INSERT INTO table_name (id, name) VALUES (?, ?)
     ON DUPLICATE KEY UPDATE name=VALUES(name)';

解释 假设这是表格。

+----+----------+
| id | name     |
+----+----------+
|  1 | Urfusion |
|  2 | Christian|
+----+----------+

现在我们正在执行ON DUPLICATE KEY UPDATE

INSERT INTO table_name VALUES (3,'Example') ON DUPLICATE KEY UPDATE name='Example';

结果是

+----+----------+
| id | name     |
+----+----------+
|  1 | Urfusion |
|  2 | Christian|
|  3 | Example  |
+----+----------+

Example 已插入到表中,因为没有带有键 id 的条目,如果我们尝试在位置 1 或 2 上插入数据,那么现在

INSERT INTO table_name VALUES (1,'Name_changed') ON DUPLICATE KEY UPDATE name='Name_changed';

那么结果是

| id | name        |
+----+-------------+
|  1 | Name_changed|
|  2 | Christian   |
|  3 | Example     |
+----+-------------+

了解更多information

【讨论】:

我对第二个选项不是很熟悉,你能解释一下吗?我已经阅读了您提供的链接,但它让我感到困惑,第一个选项对我不起作用 哦,我明白了,但我有点需要帮助来实现这个我尝试使用它但它不起作用所以我只是输入查询或者我需要其他东西例如这是我的表 $query = 'INSERT INTO product_category (id, category) VALUES (?, ?) ON DUPLICATE KEY UPDATE category=VALUES(category)';就这样吗? 查看web.archive.org/web/20090221091226/http://codeigniter.com/… 另一种实现方案1的方法是检查你的模型是否有ID,如果ID为null或0则调用insert,否则更新。【参考方案2】:
$this->db->replace('profile',$data);

如果存在更新,否则插入

【讨论】:

如果不需要特殊逻辑,这似乎工作得更快!

以上是关于Codeigniter 如果不存在则插入,如果不存在则更新的主要内容,如果未能解决你的问题,请参考以下文章

CodeIgniter:检查记录是不是存在

文件操作

数据库:如果存在则“更新”如果不存在则插入 [重复]

HSQLDB 如果不存在则插入,如果存在则更新

如果不存在则插入mysql,如果存在则不更新

MySQL INSERT插入条件判断:如果不存在则插入