0

我有这个功能可以执行以下操作

function save($owner,$data){
///$owner='00002';$data=[['type1','value1'],['type','value2']];
///check if this $data is already in database, if +ve and != then update else insert
        $sel='';$rs=[];$ins=FALSE;$up=FALSE;$end=[];

        $this->db->select('id,type,value')->where('owner',$owner)

        //building WHERE statment
        foreach(array_keys($data)as $k)
            $sel.="type='$k' OR ";

        $this->db->where("(".trim($sel,' OR ').")");

        $r=$this->db->get('settings');

        if($r->num_rows() > 0)//building reference array
            foreach($r->result() as $r)$rs[$r->type]=$r;

        foreach($data as $t=>$v)
        {
            if(isset($rs[$t])){//case input already in db-->update
                if(!$v || $v!=$rs[$t]->value)$up[]=['id'=>$rs[$t]->id,'value'=>$v,'archived'=>0];
            }else{//case not-->insert
                if($v)$ins[]=['type'=>$t,'value'=>$v,'owner'=>$owner];
            }   
        }

        $this->db->insert_batch('settings',$ins);
        $this->db->update_batch('settings',$up,'id');
    }

现在我如何确认 insert_batch 和 update_patch 都有效以及如何返回更新了多少字段.. 我尝试使用 db->affected_rows() 但由于我使用 2 个语句,因此它的返回不准确。

有任何想法吗?

4

1 回答 1

1

为它创建一个变量怎么样?

private $inserted_num_rows;
private $updated_num_rows;

然后存储到受影响的行

$this->db->insert_batch('settings',$ins);
$this->inserted_num_rows = $this->db->affected_rows();

$this->db->update_batch('settings',$up,'id');
$this->updated_num_rows = $this->db->affected_rows();

然后只需创建一个getter返回数据

function get_inserted_num_rows()
{
   return $this->inserted_num_rows;
}

function get_updated_num_rows()
{
   return $this->updated_num_rows;
}
于 2013-03-03T13:02:07.177 回答