{"id":17,"date":"2008-10-13T16:00:33","date_gmt":"2008-10-13T23:00:33","guid":{"rendered":"http:\/\/kellytehuna.com\/blog\/?p=17"},"modified":"2008-10-13T16:03:16","modified_gmt":"2008-10-13T23:03:16","slug":"php-data-access-layer","status":"publish","type":"post","link":"https:\/\/kellytehuna.com\/blog\/2008\/10\/13\/php-data-access-layer\/","title":{"rendered":"PHP Data Access Layer"},"content":{"rendered":"<p>For some time I&#8217;ve been toying with the idea of building my own, custom data access layer.\u00a0 Sure there are plenty out there.\u00a0 Some of them are HUGE (just think PEAR::DB, or <a title=\"ADOdb Library for PHP\" href=\"http:\/\/phplens.com\/adodb\/\" target=\"_blank\">ADOdb<\/a>), which isn&#8217;t a bad thing in and of itself if, and only if, they still perform well.\u00a0 I believe ADOdb performs pretty well, but I&#8217;ve not actually run the benchmarks to confirm this, so I won&#8217;t enter in to that argument.\u00a0 A quick Google search will bring up plenty of articles discussing the pros and cons of Database Abstraction Layers.<!--more--><\/p>\n<p>The reason I decided to create my own is simple: it will function the way I want it to and it will read the way I want it to.\u00a0 Isn&#8217;t that really what matters most?\u00a0 Other than performance, which can be improved over time by minor tweaks and factorizations of the codebase.<\/p>\n<p>The main motivation for my API is in fact inspired by the <a title=\"CodeIgniter - Open source PHP web application framework\" href=\"http:\/\/codeigniter.com\/\" target=\"_blank\">CodeIgnite Framework<\/a>, by <a title=\"EllisLab - Where Ideas Hatch!\" href=\"http:\/\/ellislab.com\">EllisLab, Inc<\/a>.\u00a0 What EllisLab has done, is created a <a title=\"Wikipedia - Fluent Interfaces\" href=\"http:\/\/en.wikipedia.org\/wiki\/Fluent_interface\" target=\"_blank\">fluent interface<\/a> for their database access layer, which is a fancy way of saying, they let piece your queries together by chaining the various methods of that data access object, one after the other so the entire things reads more fluently.<\/p>\n<p>For example, rather than typing the following:<\/p>\n<p><code class=\"php\">$dao-&gt;select(array('column','column2'));<br \/>\n$dao-&gt;from('table','t');<br \/>\n$dao-&gt;where('t.column=1 AND t.collumn!=4');<br \/>\n$dao-&gt;order_by('t.column','ASC');<br \/>\n$dao-&gt;execute();<\/code><\/p>\n<p>You could write that as:<\/p>\n<p><code class=\"php\">$dao-&gt;select(array('column','column2'))<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;-&gt;from('table','t')<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;-&gt;where('t.column=1 AND t.collumn!=4')<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;-&gt;order_by('t.column','ASC')<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;-&gt;execute();<\/code><\/p>\n<p>I know there isn&#8217;t much difference between the two sets of method calls, but I like the latter much better.\u00a0 It reads nicer and you can kinda make out what the query will actually look like, without having to worry to much about syntax and what not.<\/p>\n<p>I&#8217;m hoping to be done with the initial API any day now and will likely be putting it to good use in Timeline, so I&#8217;ll see how well it performs soon enough.\u00a0 I&#8217;m looking forward to seeing whether I can meet all the goals I have set for myself over the next little while.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>For some time I&#8217;ve been toying with the idea of building my own, custom data access layer.\u00a0 Sure there are plenty out there.\u00a0 Some of them are HUGE (just think PEAR::DB, or ADOdb), which isn&#8217;t a bad thing in and of itself if, and only if, they still perform well.\u00a0 I believe ADOdb performs pretty [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[17,11,12],"tags":[132,18,14],"class_list":["post-17","post","type-post","status-publish","format-standard","hentry","category-database-abstraction","category-software","category-timeline","tag-database-abstraction","tag-fluent-interface","tag-mysql"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"For some time I&#039;ve been toying with the idea of building my own, custom data access layer. Sure there are plenty out there. Some of them are HUGE (just think PEAR::DB, or ADOdb), which isn&#039;t a bad thing in and of itself if, and only if, they still perform well. I believe ADOdb performs pretty\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Kelly Te Huna\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/kellytehuna.com\/blog\/2008\/10\/13\/php-data-access-layer\/\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Kelly Te Huna - The musings of a simple man...\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"PHP Data Access Layer - Kelly Te Huna\" \/>\n\t\t<meta property=\"og:description\" content=\"For some time I&#039;ve been toying with the idea of building my own, custom data access layer. Sure there are plenty out there. Some of them are HUGE (just think PEAR::DB, or ADOdb), which isn&#039;t a bad thing in and of itself if, and only if, they still perform well. I believe ADOdb performs pretty\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/kellytehuna.com\/blog\/2008\/10\/13\/php-data-access-layer\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2008-10-13T23:00:33+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2008-10-13T23:03:16+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"PHP Data Access Layer - Kelly Te Huna\" \/>\n\t\t<meta name=\"twitter:description\" content=\"For some time I&#039;ve been toying with the idea of building my own, custom data access layer. Sure there are plenty out there. Some of them are HUGE (just think PEAR::DB, or ADOdb), which isn&#039;t a bad thing in and of itself if, and only if, they still perform well. I believe ADOdb performs pretty\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/2008\\\/10\\\/13\\\/php-data-access-layer\\\/#blogposting\",\"name\":\"PHP Data Access Layer - Kelly Te Huna\",\"headline\":\"PHP Data Access Layer\",\"author\":{\"@id\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/author\\\/admin\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/#organization\"},\"datePublished\":\"2008-10-13T16:00:33-04:00\",\"dateModified\":\"2008-10-13T16:03:16-04:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/2008\\\/10\\\/13\\\/php-data-access-layer\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/2008\\\/10\\\/13\\\/php-data-access-layer\\\/#webpage\"},\"articleSection\":\"Database Abstraction, Software, Timeline, Database Abstraction, Fluent Interface, MySQL\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/2008\\\/10\\\/13\\\/php-data-access-layer\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/category\\\/software\\\/#listItem\",\"name\":\"Software\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/category\\\/software\\\/#listItem\",\"position\":2,\"name\":\"Software\",\"item\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/category\\\/software\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/category\\\/software\\\/timeline\\\/#listItem\",\"name\":\"Timeline\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/category\\\/software\\\/timeline\\\/#listItem\",\"position\":3,\"name\":\"Timeline\",\"item\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/category\\\/software\\\/timeline\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/2008\\\/10\\\/13\\\/php-data-access-layer\\\/#listItem\",\"name\":\"PHP Data Access Layer\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/category\\\/software\\\/#listItem\",\"name\":\"Software\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/2008\\\/10\\\/13\\\/php-data-access-layer\\\/#listItem\",\"position\":4,\"name\":\"PHP Data Access Layer\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/category\\\/software\\\/timeline\\\/#listItem\",\"name\":\"Timeline\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/#organization\",\"name\":\"Kelly Te Huna\",\"description\":\"The musings of a simple man...\",\"url\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/author\\\/admin\\\/#author\",\"url\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/author\\\/admin\\\/\",\"name\":\"Kelly Te Huna\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/2008\\\/10\\\/13\\\/php-data-access-layer\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8eeeb6ff37cc9f9c1e111b8bf3ac2f21676fa4195fb2abc9d4ecf72c2657c345?s=96&r=pg\",\"width\":96,\"height\":96,\"caption\":\"Kelly Te Huna\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/2008\\\/10\\\/13\\\/php-data-access-layer\\\/#webpage\",\"url\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/2008\\\/10\\\/13\\\/php-data-access-layer\\\/\",\"name\":\"PHP Data Access Layer - Kelly Te Huna\",\"description\":\"For some time I've been toying with the idea of building my own, custom data access layer. Sure there are plenty out there. Some of them are HUGE (just think PEAR::DB, or ADOdb), which isn't a bad thing in and of itself if, and only if, they still perform well. I believe ADOdb performs pretty\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/2008\\\/10\\\/13\\\/php-data-access-layer\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/author\\\/admin\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/author\\\/admin\\\/#author\"},\"datePublished\":\"2008-10-13T16:00:33-04:00\",\"dateModified\":\"2008-10-13T16:03:16-04:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/\",\"name\":\"Kelly Te Huna\",\"description\":\"The musings of a simple man...\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/kellytehuna.com\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"PHP Data Access Layer - Kelly Te Huna","description":"For some time I've been toying with the idea of building my own, custom data access layer. Sure there are plenty out there. Some of them are HUGE (just think PEAR::DB, or ADOdb), which isn't a bad thing in and of itself if, and only if, they still perform well. I believe ADOdb performs pretty","canonical_url":"https:\/\/kellytehuna.com\/blog\/2008\/10\/13\/php-data-access-layer\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/kellytehuna.com\/blog\/2008\/10\/13\/php-data-access-layer\/#blogposting","name":"PHP Data Access Layer - Kelly Te Huna","headline":"PHP Data Access Layer","author":{"@id":"https:\/\/kellytehuna.com\/blog\/author\/admin\/#author"},"publisher":{"@id":"https:\/\/kellytehuna.com\/blog\/#organization"},"datePublished":"2008-10-13T16:00:33-04:00","dateModified":"2008-10-13T16:03:16-04:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/kellytehuna.com\/blog\/2008\/10\/13\/php-data-access-layer\/#webpage"},"isPartOf":{"@id":"https:\/\/kellytehuna.com\/blog\/2008\/10\/13\/php-data-access-layer\/#webpage"},"articleSection":"Database Abstraction, Software, Timeline, Database Abstraction, Fluent Interface, MySQL"},{"@type":"BreadcrumbList","@id":"https:\/\/kellytehuna.com\/blog\/2008\/10\/13\/php-data-access-layer\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/kellytehuna.com\/blog\/#listItem","position":1,"name":"Home","item":"https:\/\/kellytehuna.com\/blog\/","nextItem":{"@type":"ListItem","@id":"https:\/\/kellytehuna.com\/blog\/category\/software\/#listItem","name":"Software"}},{"@type":"ListItem","@id":"https:\/\/kellytehuna.com\/blog\/category\/software\/#listItem","position":2,"name":"Software","item":"https:\/\/kellytehuna.com\/blog\/category\/software\/","nextItem":{"@type":"ListItem","@id":"https:\/\/kellytehuna.com\/blog\/category\/software\/timeline\/#listItem","name":"Timeline"},"previousItem":{"@type":"ListItem","@id":"https:\/\/kellytehuna.com\/blog\/#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/kellytehuna.com\/blog\/category\/software\/timeline\/#listItem","position":3,"name":"Timeline","item":"https:\/\/kellytehuna.com\/blog\/category\/software\/timeline\/","nextItem":{"@type":"ListItem","@id":"https:\/\/kellytehuna.com\/blog\/2008\/10\/13\/php-data-access-layer\/#listItem","name":"PHP Data Access Layer"},"previousItem":{"@type":"ListItem","@id":"https:\/\/kellytehuna.com\/blog\/category\/software\/#listItem","name":"Software"}},{"@type":"ListItem","@id":"https:\/\/kellytehuna.com\/blog\/2008\/10\/13\/php-data-access-layer\/#listItem","position":4,"name":"PHP Data Access Layer","previousItem":{"@type":"ListItem","@id":"https:\/\/kellytehuna.com\/blog\/category\/software\/timeline\/#listItem","name":"Timeline"}}]},{"@type":"Organization","@id":"https:\/\/kellytehuna.com\/blog\/#organization","name":"Kelly Te Huna","description":"The musings of a simple man...","url":"https:\/\/kellytehuna.com\/blog\/"},{"@type":"Person","@id":"https:\/\/kellytehuna.com\/blog\/author\/admin\/#author","url":"https:\/\/kellytehuna.com\/blog\/author\/admin\/","name":"Kelly Te Huna","image":{"@type":"ImageObject","@id":"https:\/\/kellytehuna.com\/blog\/2008\/10\/13\/php-data-access-layer\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/8eeeb6ff37cc9f9c1e111b8bf3ac2f21676fa4195fb2abc9d4ecf72c2657c345?s=96&r=pg","width":96,"height":96,"caption":"Kelly Te Huna"}},{"@type":"WebPage","@id":"https:\/\/kellytehuna.com\/blog\/2008\/10\/13\/php-data-access-layer\/#webpage","url":"https:\/\/kellytehuna.com\/blog\/2008\/10\/13\/php-data-access-layer\/","name":"PHP Data Access Layer - Kelly Te Huna","description":"For some time I've been toying with the idea of building my own, custom data access layer. Sure there are plenty out there. Some of them are HUGE (just think PEAR::DB, or ADOdb), which isn't a bad thing in and of itself if, and only if, they still perform well. I believe ADOdb performs pretty","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/kellytehuna.com\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/kellytehuna.com\/blog\/2008\/10\/13\/php-data-access-layer\/#breadcrumblist"},"author":{"@id":"https:\/\/kellytehuna.com\/blog\/author\/admin\/#author"},"creator":{"@id":"https:\/\/kellytehuna.com\/blog\/author\/admin\/#author"},"datePublished":"2008-10-13T16:00:33-04:00","dateModified":"2008-10-13T16:03:16-04:00"},{"@type":"WebSite","@id":"https:\/\/kellytehuna.com\/blog\/#website","url":"https:\/\/kellytehuna.com\/blog\/","name":"Kelly Te Huna","description":"The musings of a simple man...","inLanguage":"en-US","publisher":{"@id":"https:\/\/kellytehuna.com\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Kelly Te Huna - The musings of a simple man...","og:type":"article","og:title":"PHP Data Access Layer - Kelly Te Huna","og:description":"For some time I've been toying with the idea of building my own, custom data access layer. Sure there are plenty out there. Some of them are HUGE (just think PEAR::DB, or ADOdb), which isn't a bad thing in and of itself if, and only if, they still perform well. I believe ADOdb performs pretty","og:url":"https:\/\/kellytehuna.com\/blog\/2008\/10\/13\/php-data-access-layer\/","article:published_time":"2008-10-13T23:00:33+00:00","article:modified_time":"2008-10-13T23:03:16+00:00","twitter:card":"summary_large_image","twitter:title":"PHP Data Access Layer - Kelly Te Huna","twitter:description":"For some time I've been toying with the idea of building my own, custom data access layer. Sure there are plenty out there. Some of them are HUGE (just think PEAR::DB, or ADOdb), which isn't a bad thing in and of itself if, and only if, they still perform well. I believe ADOdb performs pretty"},"aioseo_meta_data":{"post_id":"17","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2023-10-23 01:21:35","updated":"2026-04-25 23:19:52","focus_keyword":null,"additional_keywords":null,"truseo_locale":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/kellytehuna.com\/blog\/\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/kellytehuna.com\/blog\/category\/software\/\" title=\"Software\">Software<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/kellytehuna.com\/blog\/category\/software\/timeline\/\" title=\"Timeline\">Timeline<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tPHP Data Access Layer\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/kellytehuna.com\/blog\/"},{"label":"Software","link":"https:\/\/kellytehuna.com\/blog\/category\/software\/"},{"label":"Timeline","link":"https:\/\/kellytehuna.com\/blog\/category\/software\/timeline\/"},{"label":"PHP Data Access Layer","link":"https:\/\/kellytehuna.com\/blog\/2008\/10\/13\/php-data-access-layer\/"}],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p2FJaA-h","jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/kellytehuna.com\/blog\/wp-json\/wp\/v2\/posts\/17","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kellytehuna.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kellytehuna.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kellytehuna.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kellytehuna.com\/blog\/wp-json\/wp\/v2\/comments?post=17"}],"version-history":[{"count":2,"href":"https:\/\/kellytehuna.com\/blog\/wp-json\/wp\/v2\/posts\/17\/revisions"}],"predecessor-version":[{"id":19,"href":"https:\/\/kellytehuna.com\/blog\/wp-json\/wp\/v2\/posts\/17\/revisions\/19"}],"wp:attachment":[{"href":"https:\/\/kellytehuna.com\/blog\/wp-json\/wp\/v2\/media?parent=17"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kellytehuna.com\/blog\/wp-json\/wp\/v2\/categories?post=17"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kellytehuna.com\/blog\/wp-json\/wp\/v2\/tags?post=17"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}