<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CodeSanity &#187; active record</title>
	<atom:link href="http://codesanity.net/tag/active-record/feed/" rel="self" type="application/rss+xml" />
	<link>http://codesanity.net</link>
	<description>PHP, Javascript &#38; Technology Ramblings</description>
	<lastBuildDate>Wed, 07 Jul 2010 00:28:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Why You Should Always Use Active Record</title>
		<link>http://codesanity.net/2010/03/active-record/</link>
		<comments>http://codesanity.net/2010/03/active-record/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 01:52:58 +0000</pubDate>
		<dc:creator>Tom Schlick</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[active record]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[escaped]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[queries]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://codesanity.net/?p=205</guid>
		<description><![CDATA[Active Record can be a very useful tool in your developer arsenal. It allows you to code faster and helps ensure your queries execute without security issues.]]></description>
			<content:encoded><![CDATA[<p>I recently came across a post over at <a href="http://stackoverflow.com" target="_blank">Stack Overflow</a> about the <a href="http://stackoverflow.com/questions/2394355/is-it-a-good-idea-to-use-codeigniters-active-record-library-to-manipulate-mysql-d" target="_blank">pros and cons of using the active record class</a> that CodeIgniter provides. I outlined to the poster several advantages of using the active record class as well as the disadvantages.</p>
<h2>Security</h2>
<p>Through the development cycle of a web application, you are going to write hundreds if not thousands of queries for each specific thing you want your application to do. That means for each query you write you will have to wrap it with functions that make it safe so that SQL injection and other malicious things cannot take place. Now say if you write 1000 queries through he course of your development and you forget to properly escape them 1% of the time (very very conservative). You will have 10 possible places for your malicious users to bring down your system.</p>
<p>If you had used Active Record you wouldn&#8217;t have had that happen. Active Record doesn&#8217;t forget to escape and filter those queries. You wouldn&#8217;t have a client calling you at 3am because their pride and joy is displaying porn ads or even worse that their customer&#8217;s personal information has been leaked to hackers.</p>
<h2>Performance</h2>
<p>One of his concerns was the performance impact that the Active Record class imposed. Coming from someone who uses the AR class every day in my 9-5, I have never noticed a significant performance impact on any of the queries I write. I dont know the exact benchmarks of it but I would think the most it adds to any query would by around .0001 seconds. I think the small impact it has on your application is well worth the peace of mind that all of your queries are secure from the few malicious users you are bound to cross paths with.</p>
<h2>Complex Queries</h2>
<p>The Active Record class does a pretty good job at 99% of the queries you are most likely to run. It powers through insert/update/select/delete queries with no problem at all. However it is not perfect. If your application demands a few complex queries you can very easily switch back to straight SQL with $this-&gt;db-&gt;query(); . This way you get the best of both worlds. You can be secure in your cookie cutter queries that you write all the time but when you have to do something that is a little more complicated you have the ability to switch very easily.</p>
<h4>In my opinion there isn&#8217;t a real reason not to use CodeIgniter&#8217;s Active Record. The benefits it provides far outweigh the downsides. Unless of course your someone who never makes a mistake in programming, in that case forget everything I have told you.</h4>
]]></content:encoded>
			<wfw:commentRss>http://codesanity.net/2010/03/active-record/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How to Structure Models in your MVC based Web Application</title>
		<link>http://codesanity.net/2009/11/structure-models-mvc-based-web-application/</link>
		<comments>http://codesanity.net/2009/11/structure-models-mvc-based-web-application/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 05:01:20 +0000</pubDate>
		<dc:creator>Tom Schlick</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[active record]]></category>
		<category><![CDATA[applications architecture]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[crud]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[view]]></category>

		<guid isPermaLink="false">http://codesanity.net/?p=99</guid>
		<description><![CDATA[MVC has defiantly changed the way applications are written over the past few years. It is more organized and developer-friendly, but it comes with a bit of a learning curve. I will cover what models are and how I use them to speed up my application development.]]></description>
			<content:encoded><![CDATA[<h1>MVC</h1>
<p>Ever since I started using <a href="http://codeigniter.com">CodeIgniter</a> about a year and a half ago, I feel that my coding style has drastically improved as well as the speed, security, and reliability of my applications. This is mostly due to CodeIgniter&#8217;s <a href="http://en.wikipedia.org/wiki/Model-view-controller">MVC</a> approach to the structure of the application. It separates your code into three stages:</p>
<ul>
<li>Model &#8211; Used to interact with your database or data source and return the data back to your application</li>
<li>View &#8211; Holds all of the display logic such as html, css and javascript</li>
<li>Controller &#8211; Sort of the middleman, used to coordinate all the actions from Models and Libraries into a View to display to the user&#8217;s browser</li>
</ul>
<h1>CRUD</h1>
<p><a href="http://en.wikipedia.org/wiki/Create,_read,_update_and_delete">CRUD (Create, read, update and delete)</a> is a way of structuring your code that interfaces with your database. Those four actions handle 99% of the actions you will do with the data in your database so why should we duplicate functionality every time we need to do something? For my examples I will be using the <a href="http://codeigniter.com/user_guide/database/active_record.html">Active Record Class</a> in CodeIgniter but it would be just as easy for you to use simple SQL statements in your PHP code.</p>
<p>Ok that&#8217;s enough of the vocabulary lesson, lets get into some code.</p>
<h1>Start of the Model</h1>
<p><script src="http://gist.github.com/464047.js?file=gistfile1.php"></script></p>
<p>All we are doing here is declaring the model as &#8220;Blog_model&#8221; and we will save this code in blog_model.php in the models folder in Codeigniter.</p>
<h1>Create</h1>
<p>Creating data is pretty simple, especially in codeigniter. You should only need a single function to create data for each table in your database. This is how i structure my insert functions.</p>
<p><script src="http://gist.github.com/464050.js?file=gistfile1.php"></script></p>
<p>Now what the code above is actually doing is this. When i call $this-&gt;whatever_model-&gt;insert_blog_post($data); , i pass a $data variable which is actually just an array with the index names matching to the database field names. If you are familiar with <a href="http://codeigniter.com/user_guide/database/active_record.html" target="_blank">CodeIgniter&#8217;s Active Record Class</a> this approach is nothing new to you.</p>
<h1>Read</h1>
<p>Reading information from a database is nothing new. You send a select query to a database and it returns results, how could it get any simpler? Well what usually ends up happening over the development of an application is that the developer will create multiple functions that essentially do the same thing. One function will query the database based on the Unique ID # of an item. Another will query checking to see if a particular title in that blog post already exists. So how can these be combined? Well you can create a single function that actually interacts with the database. It is passed a few parameters that tell it what query to run and it does just that. This function is called by other functions that pass those specific parameters. Here is an example.</p>
<p><script src="http://gist.github.com/464053.js?file=gistfile1.php"></script></p>
<h1>Update</h1>
<p>Now updating an row (or many rows) in the database is just as easy as adding a row. The first parameter is your where statement which includes the conditions that the rows must have to be updates. The second parameter is the data that will be inserted into those selected rows.</p>
<p><script src="http://gist.github.com/464055.js?file=gistfile1.php"></script></p>
<p>Pretty simple right? Now all you have to do from anywhere in your application to update a row in blog_posts is $this-&gt;blog_model-&gt;update_blog_post(array(&#8216;ID&#8217; =&gt; 5), array(&#8216;title&#8217; =&gt; &#8216;Getting Started with CRUD&#8217;));</p>
<h1>Delete</h1>
<p>Just as you might suspect, deleting a post is just as simple as adding or updating a post.</p>
<p><script src="http://gist.github.com/464058.js?file=gistfile1.php"></script></p>
<p>Now just run the command $this-&gt;blog_model-&gt;delete_blog_post(array(&#8216;ID&#8217; =&gt; &#8217;223&#8242;));</p>
<h2>Thats it!</h2>
<p>If you have any questions or comments be sure to leave them below!</p>
]]></content:encoded>
			<wfw:commentRss>http://codesanity.net/2009/11/structure-models-mvc-based-web-application/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk
Page Caching using disk (enhanced) (user agent is rejected)
Content Delivery Network via Amazon Web Services: S3: assets.codesanity.net.s3.amazonaws.com

Served from: codesanity.net @ 2010-09-06 07:02:51 -->