[Codeingter] 回傳insert、update、delete的執行結果

話說我自己在做MVC開發的時後,有個習慣就是一定要回傳SQL的執行結果

因為這關係到在controller的寫法

但,前幾天在開發的時候遇到一個問題,明明table的資料沒有更新到,但卻回傳true

花了一點時間看了ci的source code和Google

證明是我的理解錯誤…

例如:這邊return的用意是讓我可以在controller判斷在Model的執行結果


public function updateData($id, $data){

  $this->db->where('id', $id);
  return $this->db->update('mytable', $data);

}

但是!!這裡需要理解的地方是$this->db->update() return的結果是「執行update sql是否成功」,不代表資料是否有被更新

所以,比較好的寫法是:


public function updateData($id, $data){

  $this->db->where('id', $id);
           ->update('mytable', $data);

  return ($this->db->affected_rows() > 0) ? TRUE : FALSE; 

}

更簡潔的寫法


public function updateData($id, $data){

  $this->db->where('id', $id);
           ->update('mytable', $data);

  return $this->db->affected_rows() > 0;

}

這樣做的好處是,在controller可以明確的知道table的資料到底有沒有被異動

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s