 <p>Well, I know this post is antique, but here's my 2 cents:</p> <p>I don't think this:</p> <pre><code>if(!$this-&gt;descriptions-&gt;insert($new_description)) </code></pre> <p>will work, cause the insert function from CI active record always returns TRUE (succeeding or not). If you are using debug mode, CI will stop on error and throw a screen message to the user, but insert function will still returns TRUE.</p> <p>So, if you're willing to control transactions "manualy" with CI, you'll have to use something like this:</p> <pre><code>... $this-&gt;db-&gt;trans_begin(); $this-&gt;db-&gt;insert('FOO'); if ($this-&gt;db-&gt;trans_status() === FALSE){ $this-&gt;db-&gt;trans_rollback(); }else{ $this-&gt;db-&gt;trans_commit(); } </code></pre> <p>Hope this helps someone...sometime....somewhere</p>