2016-06-21 7 views
2

Ich benutze Codeigniter 3.0.6, um ein System zu erstellen. Normalerweise verwende ich affected_rows(), um zu überprüfen, ob meine Datenbank aktualisiert ist oder nicht.CI affected_rows gibt immer 0 zurück, auch nach dem Update

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; 
    } 

Problem ist, wenn keine Aktualisierung gefunden wird, wird es 0 zurückgeben. Da ich in meinem Code zwischen Update und No Update unterscheiden möchte, verwende ich diese Lösung.

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'; 
     } 
    } 

Aber auch nach dem aktualisierten affected_rows immer int (0) zurückgeben. Was ist der Grund? Vielen Dank.

+0

btw .. Sie haben nur eine Aussage, warum hast du es in Transaktion? –

+0

@RahulM Ich möchte zwischen aktualisiert und keine Aktualisierung unterscheiden, ich suche online nach Lösung und das ist, was ich bis jetzt ... – shevado

Antwort

0

Ich verwende auch CI 3.0.6 und affected_rows() gibt die korrekte Anzahl der aktualisierten Zeilen zurück.

Können Sie einen Test ohne die Transaktionen durchführen. Etwas wie das ?

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; 
} 

Überprüfen Sie, ob ein Datensatz tatsächlich in der Datenbank aktualisiert worden ist. Sie können $ -Zeilen für den Aktualisierungsstatus prüfen.

if ($rows < 1) { 
    // no update 
} else { 
    // updated 
} 
Verwandte Themen