話說我自己在做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的資料到底有沒有被異動