2012-02-01 89 views
17

我已经显示了带有记录和“删除”图像的表格。删除图像单击我删除记录使用ajax。 supose有三个记录ID 40,41,42 如果我删除ID = 40的记录,响应返回“1”和记录被删除, 下一次如果我再次点击删除图像,它再次返回“1”。codeigniter db-> delete()总是返回true?

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")); 

回答

41

DB->删除()返回TRUE,如果删除操作是成功的。如果它不能删除该行,它将只返回FALSE。我想你应该检查类似:

$this->db->affected_rows(); 

返回数量,而不是一个布尔值,你可以用你如果条件检查。

+0

ahaaa affected_rows()适合我。谢谢Sudhir。 – 2012-02-01 09:36:22

3

Note: This answer refers to an old version. In current version delete() returns a boolean.

为什么你认为delete()返回一个布尔值?这是一个对象!

var_dump()会告诉你这个。它也会告诉你它是什么样的对象。

查看源代码:https://github.com/EllisLab/CodeIgniter/blob/develop/system/database/DB_active_rec.php#L1716

+0

我是在MySQL的思维方式(如返回true):P反正thatnks的链接,这将有助于我的未来。 – 2012-02-01 09:35:52

+0

我想返回值是'mixed',因为最终返回一个对象的一部分,它可能会返回'FALSE',无论'$ this-> query'返回哪个也是'mixed'。 – vstm 2012-02-01 09:47:45

+0

它被定义为'@return object',但混合会更好。它甚至可以是一个对象,布尔值或者甚至是'null'。 – PiTheNumber 2012-02-01 09:53:19

4

,当我们从数据库中删除的CodeIgniter 2.2.0 使用$this->db->delete()我们可以用两个标志进行操作:1. $this->db->_error_message() 和 2. $this->db->affected_rows()

所以DB查询后,我们得到了1和2,如:

删除: '',1

不会被删除: '',0与ID //未找到行,但SQL完成确定

SQL ERROR: string, -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'; 
} 
+1

作为CI 3.0的输出:'调用未定义的方法CI_DB_mysqli_driver :: error_message()' - 似乎最好的方法是使用affected_rows() – taber 2016-04-02 23:37:42