2015-03-04 2 views
2

У меня есть функция удаления в моей модели. Когда вы нажмете кнопку «Удалить», она вычитает общее количество заметок из общего столбца примечаний в моей базе данных. Напр. если у вас было 200 заметок, и вы удалили один из них, это будет 199 заметок, и заметка будет удалена из базы данных.Затронутые строки не работают - Codeigniter

Мой код:

public function entry_delete($pid) { 

     $uid=$this->session->userdata('uid'); 

     $whereConditions = array('pid' => $pid, 'uid' => $uid); 
     $this->db->where($whereConditions); 
     $this->db->delete('dayone_entries'); 

     if ($this->db->affected_rows() == 0) { 
      $sql_entry = "UPDATE users set total_entry = total_entry - 1 WHERE uid = $uid"; 
      $this->db->query($sql_entry); 
      return true; 
     } else { 
      return false; 
} 
} 

Но это не работает. Я не знаю, почему, но когда я нажимаю кнопку удаления из своего представления, он удаляет его из базы данных и вычитает -1 из моей таблицы total_entry. Однако, если я прокомментирую

$this->db->delete('dayone_entries'); 

Он все равно вычитает 1 из total_entry.

Как исправить это? Благодарю.

+1

не должен быть «затронутыми строками> 0» после того, как было выполнено удаление, а затем вычесть из другой таблицы. ваше if условие инвертировано, если 'затронутые строки == 0' (без затронутых строк), то сделать вычитание, что не имеет смысла – Ghost

+0

@Ghost, так как я могу это исправить? –

+0

ответ уже выше, измените условие if – Ghost

ответ

0

Я не знаю, если вы это исправили, но я думаю, что Дух говорит это ваше

if ($this->db->affected_rows() == 0) {} 

делают неправильный чек. Если вы только хотите, чтобы вызвать, если строки, где успешно удален вы хотите проверить

if ($this->db->affected_rows() > 0) {} 

Это говорит, если измененные строки больше, чем 0, то сделать это. В CodeIgniter говорится, что метод affected_rows() предназначен для «выполнения запросов типа« запись »(вставка, обновление и т. Д.)».

Далее следует: «Примечание: в MySQL« DELETE FROM TABLE »возвращает 0 затронутых строк. Класс базы данных имеет небольшой хак, который позволяет ему возвращать правильное количество затронутых строк. По умолчанию этот хак включен но его можно отключить в файле драйвера базы данных ». Поэтому, если ваш if ($this->db->affected_rows() == 0) {} запускается в обеих ситуациях, этот хак может быть отключен, потому что вы спрашиваете: «Если затронутые строки равны нулю, сделайте это», и он не должен запускаться, если ваше удаление было успешным.

Смежные вопросы