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 に答える