2012-02-01 90 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