2016-06-21 2 views
2

나는 Codeigniter 3.0.6을 사용하여 시스템을 구축합니다. 대개 affected_rows()를 사용하여 데이터베이스가 업데이트되었는지 여부를 확인합니다.CI affected_rows는 0을 반환 한 후에도 항상 0을 반환합니다.

function update($id=0,$data=array()) 
    { 
     $this->db->where($this->key, $id); 
     $this->db->update($this->table,$data); 
     if($this->db->affected_rows() > 0)return TRUE; 
     else return FALSE; 
    } 

문제가없는 경우 업데이트가 발견되면 0을 반환합니다. 내 코드에서 업데이트 된 것과 업데이트되지 않은 것의 구분을 원하므로이 솔루션을 사용합니다.

function update($id=0,$data=array()) 
    { 
     $this->db->trans_start(); 
     $this->db->where($this->key, $id); 
     $this->db->update($this->table,$data); 
     $this->db->trans_complete(); 
     if ($this->db->affected_rows() > 0) { 
      return TRUE; 
     } else { 
      if ($this->db->trans_status() == FALSE) { 
       return FALSE; 
      } 
      return 'No Update'; 
     } 
    } 

업데이트 된 affected_rows가 항상 int (0)을 반환 한 후에도. 그 이유는 무엇입니까? 고맙습니다.

+0

btw .. 당신은 왜 단 하나의 성명서 만 가지고 있습니까? –

+0

@RahulM 나는 업데이트 된 것과 업데이트하지 않은 것을 구별하고 싶습니다. 솔루션 온라인을 검색하면 그게 지금까지 얻을 수 있습니다 ... – shevado

답변

0

나는 또한 CI 3.0.6을 사용하고 affected_rows()는 업데이트 된 행의 정확한 양을 돌려줍니다.

트랜잭션없이 테스트를 수행 할 수 있습니까? 이 같은 ?

function update($id) 
{ 
    $this->db->set('field_name', "new_value"); 
    $this->db->where('id', $id); 
    $this->db->update('table_name'); 

    $rows = $this->db->affected_rows(); 

    return $rows; 
} 

레코드가 실제로 데이터베이스에서 업데이트되었는지 확인하십시오. 업데이트 상태에 대한 $ 행을 확인할 수 있습니다.

if ($rows < 1) { 
    // no update 
} else { 
    // updated 
} 
관련 문제