codeigniter db->удалить() всегда возвращает значение true?


Я отобразил таблицу с записью и изображением "Удалить". при удалении изображения нажмите кнопку я удаляю запись с помощью ajax. предположим, что есть три записи с идентификатором 40,41,42 . если я удалю запись с идентификатором = 40, ответ вернет "1", и запись будет удалена, в следующий раз, если я снова нажму на "удалить изображение", она снова вернет "1".

Codeigniters db->метод delete() всегда возвращает "1"? нужно ли мне вручную проверять, существует ли запись, а затем переходить к удалению? ниже приведен мой код iin ajax.php

$res = $this->db->delete(tbl_user_groups, array('owner_id' => $admin,'user_group_id'=>$gid)); 

if($res) echo json_encode (array("success"=>"true"));
else     echo json_encode (array("success"=>"false"));
Author: www.amitpatil.me, 2012-02-01

3 answers

Db->удалить() возвращает TRUE, если операция удаления выполнена успешно. Он вернет FALSE только в том случае, если НЕ СМОЖЕТ удалить строку. Я думаю, вам следует проверить что-то вроде:

$this->db->affected_rows();

, который возвращает число, а не логическое значение, которое вы можете проверить с помощью условий If.

 45
Author: Sudhir Bastakoti, 2016-03-21 13:25:23

Когда мы удаляем из бд в codeigniter 2.2.0 с помощью $this->db->delete(), мы можем работать с двумя флагами: 1. $this->db->_error_message() и 2. $this->db->affected_rows()

Таким образом, после запроса бд мы получаем 1 и 2, например:

УДАЛЕНО: ", 1

НЕ УДАЛЕНО: ", 0//строка с идентификатором не найдена, но sql завершен нормально

ОШИБКА SQL: строка, -1

Мой выбор - следующая проверка:

$this->db->delete($this->table,array('id'=>$id));
if ($this->db->_error_message()) {
    $result = 'Error! ['.$this->db->_error_message().']';
} else if (!$this->db->affected_rows()) {
    $result = 'Error! ID ['.$id.'] not found';
} else {
    $result = 'Success';
}
 4
Author: ishubin, 2016-01-31 09:12:35

Примечание: Этот ответ относится к старой версии. В текущей версии функция delete() возвращает логическое значение.

Как вы думаете, почему delete() возвращает логическое значение? Это объект!

var_dump() сказал бы тебе это. Это также подскажет вам, что это за объект.

См. Исходный Код: https://github.com/EllisLab/CodeIgniter/blob/develop/system/database/DB_active_rec.php#L1716

 3
Author: PiTheNumber, 2016-04-05 14:01:30