【问题标题】:codeigniter db->delete() returns true always?codeigniter db->delete() 总是返回 true 吗?
【发布时间】:2012-02-23 23:40:11
【问题描述】:

我已经显示了带有记录和“删除”图像的表格。在删除图像上单击我正在使用 ajax 删除记录。假设有 id 为 40,41,42 的三个记录 如果我删除 ID = 40 的记录,响应返回“1”并且记录被删除, 下次如果我再次单击删除图像,它会再次返回“1”。

codeigniters db->delete() 方法总是返回“1”? 我是否需要手动检查记录是否存在然后继续删除? 下面是我在 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"));

【问题讨论】:

标签: php ajax json codeigniter


【解决方案1】:

如果删除操作成功,db->delete() 返回TRUE。如果它不能删除该行,它只会返回FALSE。我认为您应该检查以下内容:

$this->db->affected_rows();

返回数字而不是布尔值,您可以使用 If 条件进行检查。

【讨论】:

    【解决方案2】:

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

    所以在 db 查询之后我们得到 1 和 2 如下:

    已删除:'',1

    NOT DELETED: '', 0 // 没有找到 id 的行,但是 sql 完成了 ok

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

    【讨论】:

    • 从 CI 3.0 开始,此输出:Call to undefined method CI_DB_mysqli_driver::error_message() - 似乎最好的方法是使用affected_rows()
    • @taber 在 CI 3.0 中它已更改为 $this->db->error(),它返回一个包含 codemessage 的数组。使用$this->db->error()['message'] 获取错误消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 2017-05-10
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多