2016-06-21 4 views
2

私はCodeigniter 3.0.6を使用してシステムを構築しています。 通常は、affected_rows()を使用してデータベースが更新されているかどうかをチェックします。CI affected_rowsは更新後も常に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 ..あなたは1つのステートメントしか持っていません。なぜそれをトランザクションにラップしましたか? –

+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 
} 
関連する問題