2016-06-21 3 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 .. у вас есть только одно заявление, почему вы заключили его в транзакцию ?? –

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

Проверьте, действительно ли запись была фактически обновлена ​​в базе данных. Вы можете проверить $ rows для статуса обновления.

if ($rows < 1) { 
    // no update 
} else { 
    // updated 
} 
Смежные вопросы