Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Codeigniter查询生成器更新函数_Php_Codeigniter_Activerecord - Fatal编程技术网

Php Codeigniter查询生成器更新函数

Php Codeigniter查询生成器更新函数,php,codeigniter,activerecord,Php,Codeigniter,Activerecord,我的模型中有一个更新函数,我从控制器中调用它作为 if($_POST) { $this->User_model->update('user_about',$_POST,$this->session->userdata['id']); } 接受三个参数:表名、post数据和用户id。该函数在模型中定义为 public function update($table,$data,$id) { $row=$this->db->select('*')-&

我的模型中有一个更新函数,我从控制器中调用它作为

if($_POST)
{
   $this->User_model->update('user_about',$_POST,$this->session->userdata['id']);
}
接受三个参数:表名、post数据和用户id。该函数在模型中定义为

public function update($table,$data,$id)
{
    $row=$this->db->select('*')->from($table)->WHERE('user_id',$id)->row();
    if($row)
    {
        $this->db->WHERE('user_id',$id)->UPDATE($table,$data);
    }
    else
    {
        $data['user_id']=$id;
        $this->db->insert($table,$data);
    }
}
我在这里做的是检查特定用户的记录是否不存在,它应该插入,否则将更新。很有魅力

问题:


是否有跳过IF条件块的方法?。查询生成器中是否有执行检查本身的规定?

这是一个自定义的通用插入和重复更新函数,我在编程中经常使用它

public function updateOnDuplicate($table, $data ) 
   {
     if (empty($table) || empty($data)) return false;
     $duplicate_data = array();

     foreach($data AS $key => $value) {
        $duplicate_data[] = sprintf("%s='%s'", $key, $value);
     }

     $sql = sprintf("%s ON DUPLICATE KEY UPDATE %s", $this->db->insert_string($table, $data), implode(',', $duplicate_data));

     $this->db->query($sql);
     return $this->db->insert_id();
   }

您可以在模型中使用上述函数,并在控制器中调用它。如果发生重复,该函数将更新该值。如果您需要详细的解释,请查看下面的博文。

只有使用mysql,才能使用INSERT。。重复密钥更新,但codeigniter不支持此类查询。自己编写查询。或者扩展查询生成器类并编写method@splash58这就是我所做的和它的工作。我只是想问一下,是否有人遇到过这个问题,并且有相同的想法。优秀的代码詹姆斯。我将在我的项目中使用它,谢谢