{"id":29819,"date":"2017-04-27T03:01:27","date_gmt":"2017-04-26T17:01:27","guid":{"rendered":"http:\/\/www.rjmprogramming.com.au\/ITblog\/?p=29819"},"modified":"2017-04-27T16:40:12","modified_gmt":"2017-04-27T06:40:12","slug":"sql-for-flat-files-data-type-tutorial","status":"publish","type":"post","link":"https:\/\/www.rjmprogramming.com.au\/ITblog\/sql-for-flat-files-data-type-tutorial\/","title":{"rendered":"SQL for Flat Files Data Type Tutorial"},"content":{"rendered":"<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_mathematics.php\"><img decoding=\"async\" style=\"float:left; border: 15px solid pink;\" alt=\"SQL for Flat Files Data Type Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_mathematics.jpg\" title=\"SQL for Flat Files Data Type Tutorial\"  \/><\/a><p class=\"wp-caption-text\">SQL for Flat Files Data Type Tutorial<\/p><\/div>\n<p>Do you recall a statement in this blog posting thread&#8217;s &#8220;primer&#8221; tutorial  as per &#8230;<\/p>\n<blockquote><p>\ndata type &#8220;smarts&#8221; &#8230; we&#8217;re keeping it really &#8220;everything ends up as a string&#8221; &#8230; doh &#8230; simple, for now, with our flat file data system design<\/li>\n<\/blockquote>\n<p> &#8230; well, today, we <i>continue<\/i> on the quest to add data type intelligence to our web application to improve on that &#8220;Primer&#8221; tutorial scenario.  How, <i>continue<\/i>?  Well, in a previous blog we had the functionality &#8230;<\/p>\n<blockquote>\n<ul>\n<li>when using web application <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_poll.php-GETME\" title='flat_file_poll.php'>flat_file_poll.php<\/a> with its associated <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_poll.php\" title='Click picture'>live run<\/a> link (and changed for today&#8217;s work in <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_poll.php-GETME\" title='flat_file_poll.php'>this way<\/a>), behind the scenes, a right hand data table column is added that is numeric, and that the child iframe hosting <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_engine.php---GETME\" title='flat_file_engine.php'>flat_file_engine.php<\/a> ((with this <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_engine.php?sql=SELECT+*+FROM+ourdatatable2\" title='Click picture'>live run<\/a> you can try) and which accommodated in <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_engine.php---GETME\" title='flat_file_engine.php'>this way<\/a>) now allows, for this right hand numeric column, <b>to increment the polling count<\/b> (and the leading space character is needed) within the INSERT statement VALUES fields are &#8230;\n<ol>\n<li><b>&nbsp;++<\/b> &#8230; and other possibilities for later when you tailor your own polls can be &#8230;<\/li>\n<li>&nbsp;&#8211;<span>&#8211;<\/span><\/li>\n<li>&nbsp;+=[number]<\/li>\n<li>&nbsp;-=[number]<\/li>\n<li>&nbsp;*=[number]<\/li>\n<li>&nbsp;\/=[number]<\/li>\n<li>&nbsp;%=[number]<\/li>\n<\/ol>\n<\/li>\n<li>these same ideas can apply to UPDATE fields in the SET section<\/li>\n<\/ul>\n<\/blockquote>\n<p> &#8230; that helps our <i>string<\/i> data in the Flat File act a lot like a counting number.  This was good enough for Poll Data but we want to use the Flat File SQL Engine interfaced with other web application projects that involve numbers and calculations, and so, today, we are adding to <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_engine.php----GETME\" title='flat_file_engine.php'>flat_file_engine.php<\/a> ((with this <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_engine.php?sql=SELECT+*+FROM+ourdatatable2\" title='Click picture'>live run<\/a> you can try) and which changed in <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_engine.php----GETME\" title='flat_file_engine.php'>this way<\/a> for today&#8217;s progress) &#8230;<\/p>\n<ul>\n<li>&nbsp;[colname]+[number]<\/li>\n<li>&nbsp;[colname]-[number]<\/li>\n<li>&nbsp;[colname]*[number]<\/li>\n<li>&nbsp;[colname]\/[number]<\/li>\n<li>&nbsp;[!+=_colname]<\/li>\n<li>&nbsp;[!-=_colname]<\/li>\n<li>&nbsp;[!*=_colname]<\/li>\n<li>&nbsp;[!\/=_colname]<\/li>\n<li>&nbsp;[!+_colname]<\/li>\n<li>&nbsp;[!-_colname]<\/li>\n<li>&nbsp;[!*_colname]<\/li>\n<li>&nbsp;[!\/_colname]<\/li>\n<\/ul>\n<p> &#8230; type syntax.<\/p>\n<p>And so we have a new PHP web application that accesses the Flat Files SQL Engine called <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_mathematics.php_GETME\" title='flat_file_mathematics.php'>flat_file_mathematics.php<\/a> and by its name you&#8217;d guess it is design fir mathematical applications, with a &#8220;first cab off the rank&#8221; being our Fibonacci Sequence and Golden Ratio option, which you might like to try with today&#8217;s <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_mathematics.php\" title='flat_file_mathematics.php'>live run<\/a> link for this,  supervises the child iframe hosting <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_engine.php----GETME\" title='flat_file_engine.php'>flat_file_engine.php<\/a> ((with this <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_engine.php?sql=SELECT+*+FROM+ourdatatable2\" title='Click picture'>live run<\/a> you can try) and which accommodated in <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_engine.php----GETME\" title='flat_file_engine.php'>this way<\/a> the new &#8220;make your mathematical flat file SQL engine web application&#8221; functionality.<\/p>\n<hr>\n<p id='sfffdt'>Previous relevant <a target=_blank title='SQL for Flat Files Database Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/SQL for Flat Files Database Tutorial\/'>SQL for Flat Files Database Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_poll.php\"><img decoding=\"async\" style=\"float:left; border: 15px solid pink;\" alt=\"SQL for Flat Files Database Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_poll.png\" title=\"SQL for Flat Files Database Tutorial\"  \/><\/a><p class=\"wp-caption-text\">SQL for Flat Files Database Tutorial<\/p><\/div>\n<p>We&#8217;ve spoken about &#8220;data permanence&#8221; before, when we presented <a target=_blank title='PHP Themed Supervision Sixth Genericization Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/php-themed-supervision-sixth-genericization-tutorial\/'>PHP Themed Supervision Sixth Genericization Tutorial<\/a><\/p>\n<blockquote><p>\nCan the Javascript client side of the web application world &#8220;save&#8221; anything?  Sort of, if you want to consider HTTP <a target=_blank title='Cookie information from Wikipedia ... thanks' href='http:\/\/en.wikipedia.org\/wiki\/HTTP_cookie'>Cookies<\/a>, and lots and lots of websites do this, as you probably know if you use the web to shop for things.  A server side language like PHP (or ASP.Net) can make this arrangement more permanent, because, as you probably know, you can clear the cache and (web) browser of cookie information whenever you like.  Often that &#8220;permanence&#8221; takes the form of database record(s) but today, we&#8217;re doing it via a one file (snapshot) per IP\/browser brand\/date combination.\n<\/p><\/blockquote>\n<p> &#8230; as seen from the Javascript client side of things, the place most of we users interface to when we are doing a lot of our online goings on.  In this &#8220;slice&#8221; of the &#8220;net&#8221; Cookies, or perhaps, Indexeddb, or perhaps, node.js, or perhaps MongoDB are interesting places to go to discover a more permanent data arrangement.   Here, though, with our PHP driven Dynamic Polling web application supervising the Flat File SQL Engine child iframe functionality, we can fall back on web server files, as we do with that Flat File SQL Engine, and so, even though we are, for all our intents and purposes so far, just interfacing to the one web server file, it can have some of the powers of a proprietry database none the less.  And the most significant feature in this respect is its ability to store data for as long as that web server flat file exists in a non corrupt state.  Javascript client accessible HTTP cookies rely on the web browser cache not being cleared, which is no guarantee, for sure, regarding data permanence.<\/p>\n<p>This &#8220;data permanence&#8221; came into play with our Dynamic Polling web application we left off with <a title='SQL for Flat Files Poll Tutorial' href='#sfffpt'>SQL for Flat Files Poll Tutorial<\/a> yesterday, as a result of our desire that you, the user, should be able to construct your own poll, and revisit the webpage to review the findings, or add to the findings, the latter of which the general public visiting this web application can do as well, once you, the poll creator, ever click one of the poll option buttons to set the (DDL) &#8220;ball&#8221; rolling.<\/p>\n<p>In summary, new functionality for Dynamic Polling today, as with WordPress 4.1.1&#8217;s <a target=_blank title='SQL for Flat Files Database Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/sql-for-flat-files-database-tutorial\/'>SQL for Flat Files Database Tutorial<\/a>, involves &#8230;<\/p>\n<ul>\n<li>allowing users to create their own polls, still using HTML form method=POST target=myiframe action=.\/flat_file_engine.php techniques with one extra data column list needed in the &#8220;internal use only&#8221; record of the Flat File SQL Engine specifications (because the user will not choose every option straight away, and for the web application to piece that back together again requires this button list)<\/li>\n<li>allowing the Flat File SQL Engine child iframe web application recognize that data is poll data and additionally show a <a target=_blank href='https:\/\/developers.google.com\/chart\/interactive\/docs\/index' title='Google Chart Tools provide a perfect way to visualize data on your website. From simple line charts to complex hierarchical tree maps, the chart galley provides a large number of well-designed chart types. Populating your data is easy using the provided client- and server-side tools.'>Google Chart<\/a> Pie Chart representation of the relevant SQL query result set<\/li>\n<\/ul>\n<p>And so that leaves us with, today, the PHP <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_poll.php--GETME\" title='flat_file_poll.php'>flat_file_poll.php<\/a> with its associated <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_poll.php\" title='Click picture'>live run<\/a> link (and changed for today&#8217;s work in <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_poll.php--GETME\" title='flat_file_poll.php'>this way<\/a>) supervises the child iframe hosting <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_engine.php---GETME\" title='flat_file_engine.php'>flat_file_engine.php<\/a> ((with this <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_engine.php?sql=SELECT+*+FROM+ourdatatable2\" title='Click picture'>live run<\/a> you can try) and which accommodated in <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_engine.php---GETME\" title='flat_file_engine.php'>this way<\/a> the &#8220;make your own poll&#8221; new functionality, for your perusal &#8230; and use, hopefully &#8230; please feel free.<\/p>\n<hr>\n<p id='sfffpt'>Previous relevant <a target=_blank title='SQL for Flat Files Poll Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/sql-for-flat-files-poll-tutorial\/'>SQL for Flat Files Poll Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_poll.php\"><img decoding=\"async\" style=\"float:left; border: 15px solid pink;\" alt=\"SQL for Flat Files Poll Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_poll.gif\" title=\"SQL for Flat Files Poll Tutorial\"  \/><\/a><p class=\"wp-caption-text\">SQL for Flat Files Poll Tutorial<\/p><\/div>\n<p>We venture further down the route of interfacing web applications to our Flat File SQL Engine.  The first interfacing web application we started out on, to the &#8220;proof of concept&#8221; level yesterday, when we presented <a title='SQL for Flat Files DDL Tutorial' href='#sfffddlt'>SQL for Flat Files DDL Tutorial<\/a>, we&#8217;ve extended in its scope.  Interfacing can be a rewarding programming exercise for a few reasons &#8230;<\/p>\n<ul>\n<li>modularization of code can be a good way to go and with interfacing you tend to compartmentalize functionality into components, which can be useful<\/li>\n<li>interfacing is a &#8220;two way street&#8221; but if you have control of the &#8220;intersection&#8221; &#8230; chortle, chortle &#8230; you can shape the design to your purposes, and ease of programming and\/or use &#8230; contrast that to interfacing to third-party products, and this inhouse approach is easier on occasions, depending on third-party interfacing documentation, the quality of which can swing the argument the other way, on occasions, too<\/li>\n<li>interfacing adds flexibility, because the smaller components you develop can each easily move in different design directions, more easily, generally<\/li>\n<li>interfacing with the smaller components means third parties may be tempted by what you have to offer, if you document the interfacing well enough<\/li>\n<\/ul>\n<p> &#8230; as well as, at least for us, a sense of satisfaction that design has been a major part of the project, all the way through its unit testing phase, and beyond.<\/p>\n<p>So interfacing being a &#8220;two way street&#8221; did mean that we needed to tinker with the Flat File SQL Engine child iframe part of the interfacing to the Poll Web Application parent.  We didn&#8217;t want our DDL &#8220;CREATE TABLE&#8221; (+ DML &#8220;INSERT&#8221;) ideas of yesterday to change, because we want any user to be able to create their own poll if they like, and we think to involve any SQL &#8220;UPDATE&#8221; statement is far too convoluted.  So with a poll, users vote, and users get a vote each, generally, so we want numeric &#8220;count&#8221; data table fields (which we have control over, and arrange that such fields are the last fields in our DDL &#8220;CREATE TABLE&#8221; statements) to be able to be incremented in a Flat File SQL Engine &#8220;INSERT&#8221; statement.  No worries, we make the rules, and so the rules for this, are &#8230;<\/p>\n<ul>\n<li>when using web application <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_poll.php-GETME\" title='flat_file_poll.php'>flat_file_poll.php<\/a> with its associated <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_poll.php\" title='Click picture'>live run<\/a> link (and changed for today&#8217;s work in <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_poll.php-GETME\" title='flat_file_poll.php'>this way<\/a>), behind the scenes, a right hand data table column is added that is numeric, and that the child iframe hosting <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_engine.php---GETME\" title='flat_file_engine.php'>flat_file_engine.php<\/a> ((with this <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_engine.php?sql=SELECT+*+FROM+ourdatatable2\" title='Click picture'>live run<\/a> you can try) and which accommodated in <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_engine.php---GETME\" title='flat_file_engine.php'>this way<\/a>) now allows, for this right hand numeric column, <b>to increment the polling count<\/b> (and the leading space character is needed) within the INSERT statement VALUES fields are &#8230;\n<ol>\n<li><b>&nbsp;++<\/b> &#8230; and other possibilities for later when you tailor your own polls can be &#8230;<\/li>\n<li>&nbsp;&#8211;<span>&#8211;<\/span><\/li>\n<li>&nbsp;+=[number]<\/li>\n<li>&nbsp;-=[number]<\/li>\n<li>&nbsp;*=[number]<\/li>\n<li>&nbsp;\/=[number]<\/li>\n<li>&nbsp;%=[number]<\/li>\n<\/ol>\n<\/li>\n<li>these same ideas can apply to UPDATE fields in the SET section<\/li>\n<\/ul>\n<p>We hope you try some polling today.<\/p>\n<hr>\n<p id='sfffddlt'>Previous relevant <a target=_blank title='SQL for Flat Files DDL Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/sql-for-flat-files-ddl-tutorial\/'>SQL for Flat Files DDL Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_poll.php\"><img decoding=\"async\" style=\"float:left; border: 15px solid pink;\" alt=\"SQL for Flat Files DDL Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_poll.jpg\" title=\"SQL for Flat Files DDL Tutorial\"  \/><\/a><p class=\"wp-caption-text\">SQL for Flat Files DDL Tutorial<\/p><\/div>\n<p>Welcome to the <i>tutorial title<\/i> that changes the least but with a big change to direction with our Flat File SQL Engine thinking because today&#8217;s SQL DDL focussed work opens our Flat File SQL Engine up to &#8216;outside&#8217; use.  That &#8216;outside&#8217; is only web applications from the www.rjmprogramming.com.au domain, and this is deliberate.  Remember when we said, in an earlier blog posting on this thread whose last offering was <a title='SQL for Flat Files DML Tutorial' href='#sfffdt'>SQL for Flat Files DML Tutorial<\/a>?<\/p>\n<blockquote><p>\nDDL functionality is hidden from view in the logic of the PHP\n<\/p><\/blockquote>\n<p> &#8230; well, yes, that is still the go, and today (as with WordPress 4.1.1&#8217;s <a target=_blank title='SQL for Flat Files DDL Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/sql-for-flat-files-ddl-tutorial\/'>SQL for Flat Files DDL Tutorial<\/a>) we open up a mechanism in the code of <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_engine.php--GETME\" title='flat_file_engine.php'>flat_file_engine.php<\/a> (with this <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_engine.php?sql=SELECT+*+FROM+ourdatatable2\" title='Click picture'>live run<\/a> you can try) and which in a small time way, in <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_engine.php--GETME\" title='flat_file_engine.php'>this way<\/a> to allow for this interfacing to other www.rjmprogramming.com.au domain web applications that fit in with the &#8220;protocols&#8221; we introduce for our Flat File SQL Engine today.  The rules of interfacing are &#8230;<\/p>\n<ul>\n<li>the web application &#8220;calling&#8221; the Flat File SQL Engine should reside on the www.rjmprogramming.com.au domain<\/li>\n<li>the &#8220;calling&#8221; web application should use an HTML form method=POST methodology, and must fit in with precise field name conditions<\/li>\n<li>the &#8220;calling&#8221; web application should use a DDL SQL statement of the form, exemplified by <i>CREATE TABLE [newApplicationTableName] (colname1of4,colname2of4,colname3of4,colname4of4)<\/i> to effectively <i>CREATE DATABASE [newApplicationTableName]<\/i> within the Flat File system &#8230; and then from then on &#8230;<\/li>\n<li>the &#8220;calling&#8221; web application should use a DML SQL statement of the form, exemplified by <i>INSERT INTO [newApplicationTableName] (colname1of4,colname2of4,colname3of4,colname4of4) VALUES (&#8216;colvalue1of4&#8242;,&#8217;colvalue2of4&#8242;,&#8217;colvalue3of4&#8242;,&#8217;colvalue4of4&#8217;)<\/i> to populate that Flat File System database<\/li>\n<\/ul>\n<p> &#8230; and then, after all this is achieved, everybody using the Flat File system will be able to read (ie. SELECT) that new database&#8217;s information, but only the web application that created that database will be able to write or modify or delete (ie. INSERT, UPDATE, DELETE) that database&#8217;s (=data table&#8217;s) data records (rows).<\/p>\n<p>So, with this quite simple design, we are substituting the &#8220;user&#8221; of a conventional proprietry database system with a <i>home grown<\/i> web application in our (very much pared down) Flat File SQL Engine design.<\/p>\n<p>Which brings us to a real web application that takes advantage of this Flat File SQL Engine.  The first cab off the rank will be a dynamic Polling Web Application, the first draft, and just at the &#8216;proof of concept stage&#8217;, for which you can see some PHP code is <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_poll.php_GETME\" title='flat_file_poll.php'>flat_file_poll.php<\/a> and\/or try its associated <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_poll.php\" title='Click picture'>live run<\/a> link.<\/p>\n<hr>\n<p id='sfffdt'>Previous relevant <a target=_blank title='SQL for Flat Files DML Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/sql-for-flat-files-dml-tutorial\/'>SQL for Flat Files DML Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_engine.php?sql=SELECT+*+FROM+ourdatatable2\"><img decoding=\"async\" style=\"float:left; border: 15px solid pink;\" alt=\"SQL for Flat Files DML Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_engine_more.jpg\" title=\"SQL for Flat Files DML Tutorial\"  \/><\/a><p class=\"wp-caption-text\">SQL for Flat Files DML Tutorial<\/p><\/div>\n<p>Continuing on with our &#8220;Flat File SQL Engine&#8221; project today, building on yesterday&#8217;s <a title='SQL for Flat Files Primer Tutorial' href='#sfffpt'>SQL for Flat Files Primer Tutorial<\/a> we can summarize the emphasis of today&#8217;s work (also shown at WordPress 4.1.1&#8217;s <a target=_blank title='SQL for Flat Files DML Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/sql-for-flat-files-dml-tutorial\/'>SQL for Flat Files DML Tutorial<\/a>) by &#8230;<\/p>\n<ul>\n<li>relenting on those DML flat file data table data content restrictions, talked about yesterday saying, then &#8230;<br \/>\n<blockquote><p>\nwe are going to disallow ~ and ` and Comma (ie. &#8220;,&#8221;) and | from being allowed in &#8220;data values&#8221; above, period\n<\/p><\/blockquote>\n<p> &#8230; well, the &#8220;period&#8221; turned out to be 18 hours &#8230; <font size=1>chortle, chortle<\/font> &#8230; as we made it that all those characters can now be entered by the user because we control the input (during an INSERT (DML) SQL statement&#8217;s HTML (method=POST action=.\/flat_file_engine.php target=myiframe) form&#8217;s input type=text <i>onblur<\/i> event), defined in the PHP (later writing out a Javascript function) with &#8230;<br \/>\n<code><br \/>\n$cfilter=\" function filter(oi) {<br \/>\n var iois=oi.value;<br \/>\n var wasi=iois;<br \/>\n iois=iois.replace(\/\\+\/g, \\\"~ + char(43) + ~\\\");<br \/>\n iois=iois.replace(\/\\'\/g, \\\"' + char(39) + '\\\");<br \/>\n iois=iois.replace(\/\\~ \\+ char(43) \\+ \\~\/g,\\\"' + char(43) + '\\\");<br \/>\n iois=iois.replace(\/\\,\/g, \\\"' + char(44) + '\\\");<br \/>\n iois=iois.replace(\/\\`\/g, \\\"' + char(96) + '\\\");<br \/>\n iois=iois.replace(\/\\|\/g, \\\"' + char(124) + '\\\");<br \/>\n iois=iois.replace(\/\\~\/g, \\\"' + char(126) + '\\\");<br \/>\n iois=iois.replace(\/\\\"\/g, \\\"' + char(34) + '\\\");<br \/>\n iois=iois.replace(\/\\' \\+ char\\(126\\) \\+ \\' \\+ char\\(43\\) \\+ \\' \\+ char\\(126\\) \\+ \\'\/g,\\\"' + char(43) + '\\\");<br \/>\n if (iois != oi.value) {<br \/>\n  oi.value=iois;<br \/>\n  oi.title+=' ... ' + wasi;<br \/>\n }<br \/>\n return iois;<br \/>\n}<br \/>\n\";<br \/>\n<\/code><br \/>\n &#8230; via <strike><a target=_blank title='?' href='http:\/\/www.dgrz.com\/gerard\/GS.htm'>the old picture in the keyhole<\/a><\/strike> SQL data migration trick friend for special character handling in that, in many SQL &#8220;brands&#8221; &#8230;<br \/>\n <code><br \/>\n Logan's Run 1,2,3<br \/>\n <\/code><br \/>\n &#8230; can be considered to be &#8230;<br \/>\n <code><br \/>\n 'Logan' + char(39) + 's Run 1' + char(44) + '2' + char(44) + '3'<br \/>\n <\/code><br \/>\n &#8230; or something similar (like you can see with today&#8217;s <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_engine_more.jpg\" title=\"Tutorial picture\">tutorial picture<\/a>) &#8230; but remember here, we are making the rules on this project &#8230; and we are attempting to fully control and vet user interaction &#8230; it&#8217;s just that we&#8217;d be mad not to model that project on existing SQL &#8220;smarts&#8221;\n<\/li>\n<li>DML SQL statement HTML and Javascript form allowing separate HTML input type=submit buttons for each of &#8230;\n<ol>\n<li>SELECT<\/li>\n<li>INSERT<\/li>\n<li>UPDATE<\/li>\n<li>DELETE<\/li>\n<\/ol>\n<p> &#8230; allowing for WHERE clauses (that allow for AND or OR clauses that can be removed as necessary) in SELECT and UPDATE and DELETE (DML) statement scenarios &#8230; and the (method=POST action=.\/flat_file_engine.php target=myiframe) form approach behoves us to do the reverse of the &#8220;&#8216; + char(44) + &#8216;&#8221; (to flat file from Javascript client) in PHP at the server to resurrect a good looking report in our <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_engine.php-GETME\" title='flat_file_engine.php'>flat_file_engine.php<\/a> (with this <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_engine.php?sql=SELECT+*+FROM+ourdatatable2\" title='Click picture'>live run<\/a>) changed pretty massively, in <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_engine.php-GETME\" title='flat_file_engine.php'>this way<\/a> to achieve this interactive input controlled &#8220;Flat File SQL DML Engine&#8221;\n<\/li>\n<\/ul>\n<p>You&#8217;ll find no restrictions using this web application, and, as per usual, we welcome your interaction.  By design, the most you could do is DELETE all the data table records on one of the two databases, but am hoping you try more creative interaction?!<\/p>\n<hr>\n<p id='sfffpt'>Previous relevant <a target=_blank title='SQL for Flat Files Primer Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/sql-for-flat-files-primer-tutorial\/'>SQL for Flat Files Primer Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_engine.php?sql=SELECT+*+FROM+ourdatatable2\"><img decoding=\"async\" style=\"float:left; border: 15px solid pink;\" alt=\"SQL for Flat Files Primer Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_engine.jpg\" title=\"SQL for Flat Files Primer Tutorial\"  \/><\/a><p class=\"wp-caption-text\">SQL for Flat Files Primer Tutorial<\/p><\/div>\n<p>Around here, we like <a target=_blank title='Structured Query Language information from Wikipedia ... thanks' href='https:\/\/en.wikipedia.org\/wiki\/SQL'>SQL<\/a> (Structured Query Language) as a tool to work for RDBMS databases (or &#8220;data sources&#8221;) of all flavours and styles and types and content, and this should come as no surprise, as a lot of thought went into its design.  Now SQL commands can, generically speaking, be categorized into &#8230;<\/p>\n<ol>\n<li><a target=_blank title='Data definition language information from Wikipedia ... thanks' href='https:\/\/en.wikipedia.org\/wiki\/Data_definition_language'>DDL<\/a> (Data definition language) &#8230; affecting the <i>structure<\/i> of the data contained in the &#8220;data source&#8221;<\/li>\n<li><a target=_blank title='Data manipulation language information from Wikipedia ... thanks' href='https:\/\/en.wikipedia.org\/wiki\/Data_manipulation_language'>DML<\/a> (Data manipulation language) &#8230; affecting the <i>content<\/i> of the data contained in the &#8220;data source&#8221;<\/li>\n<\/ol>\n<p>Notice how open-ended we are about using the term &#8220;data source&#8221;?  That is because SQL is so good, that &#8220;data source&#8221; can mean lots of different things to lots of different people in lots of different places <font size=1>&#8230; even that little room?!<\/font><\/p>\n<p>For instance, for this thread of blog postings we want you to think of &#8220;data source&#8221; equating to &#8220;flat file&#8221;, and because of how we do things on our www.rjmprogramming.com.au domain Apache\/PHP\/MySql CentOS <font size=1>(think Linux)<\/font> Web Server, to be precise here we qualify this to &#8220;<i>Linux<\/i> flat file <i>via PHP<\/i>&#8220;.<\/p>\n<p>We&#8217;re going to write our own PHP Flat File <i>Engine<\/i> where &#8230;<\/p>\n<ol>\n<li>DDL functionality is hidden from view in the logic of the PHP<\/li>\n<li>DML functionality is available to all users, as vetted by our PHP, whether they realize it or not <font size=1>(&#8220;behind the scenes, like, guv'&#8221;)<\/font>, as the <i>Engine<\/i> mechanism that links the user interface to the flat file data stored on our www.rjmprogramming.com.au domain web server in <font size=1>&#8230; you guessed it &#8230;<\/font> flat file(s)<\/li>\n<\/ol>\n<p>What&#8217;s the purpose of this?  Can&#8217;t say for now, because we want to see what genericity happens as we go along here, but we are going to write PHP web applications to use this &#8220;<i>Linux<\/i> flat file <i>Engine<\/i> <i>via PHP<\/i>&#8220;.<\/p>\n<p>What can&#8217;t a <i>flat file<\/i> data system do that a database (data system) can?  We can think of, at the top of our head &#8230;<\/p>\n<ul>\n<li>delimitation issues regarding databases, data tables, data table columns, data table rows &#8230; a database handles all this via proprietry database &#8220;engine&#8221; software &#8230; we have to develop our own &#8220;flat file&#8221; data system thoughts here<\/li>\n<li>data type &#8220;smarts&#8221; &#8230; we&#8217;re keeping it really &#8220;everything ends up as a string&#8221; &#8230; doh &#8230; simple, for now, with our flat file data system design<\/li>\n<li>keys and indexes<\/li>\n<li>functions<\/li>\n<li>joins<\/li>\n<li>stored procedures<\/li>\n<li>triggers<\/li>\n<li>users, roles, privileges (eg. grant, deny)<\/li>\n<li>language character sets<\/li>\n<li>speed (and power) of data manipulation query findings<\/li>\n<\/ul>\n<p>In our eyes, despite this, this is very much a useful exercise, and am hoping it becomes a practical reality <font size=1>&#8230; and you&#8217;ll be pleased to know our &#8220;prepare the breakfast in the morning before you knew there could be breakfast or know there could be a morning&#8221; project is coming along fine, thanks &#8230; and thanks for asking &#8230;<\/font> for wide ranging usage applications.<\/p>\n<p>Patently, &#8220;delimitation&#8221; is the biggest bugbear with our project, but if everything is &#8220;funnelled through&#8221; our code, and not allowed to escape to other outside usages, we should be able to disallow our inhouse &#8220;delimitation&#8221; characters, to have it so they are not allowed into the &#8220;data content&#8221; with a limited annoyance factor to the more adventurous users who wanted to place such characters into their data.  And, of course, the other data bit of interest is non-English characters.  This will be an evolving matter we think about.  You&#8217;ll notice when you use database interfacing software, such as PHP and <a target=_blank title='MySql database' href='https:\/\/www.mysql.com\/'>MySql<\/a>&#8216;s brilliant <a target=_blank href='https:\/\/www.phpmyadmin.net\/'>phpMyAdmin<\/a> interface, front and centre regarding database design is a language character set of interest.  Of course, this is no accident of design, and MySql, and its ilk, are sophisticated and brilliant products that have seen many many many hours of software development time put into them.  Please do not think that we are replacing any of this database design and functionality brilliance with our work today, but our work may bring convenience and ease of &#8220;getting up and running data source work here on this domain, quickly and easily&#8221;.<\/p>\n<p>Okay, thinking <a target=_blank title='Data manipulation language information from Wikipedia ... thanks' href='https:\/\/en.wikipedia.org\/wiki\/Data_manipulation_language'>DML<\/a> (Data manipulation language), we want to be able to &#8230;<\/p>\n<ul>\n<li>SELECT [*<i>|Comma separated Column List<\/i>] FROM [table] <i>WHERE [Where clause] ORDER BY [Comma separated Column List]<\/i>;<\/li>\n<li>INSERT INTO [table] <i>([Comma separated Column List])<\/i> VALUES ([Comma separated Data List]);<\/li>\n<li><i>UPDATE [table] SET [Comma separated list of Column=Data]<\/i>;<\/li>\n<li>DELETE [table] <i>WHERE [Where clause]<\/i>;<\/li>\n<\/ul>\n<p> &#8230; where the <i>itallicized<\/i> functionalities may not be in today&#8217;s &#8220;first draft&#8221;.<\/p>\n<p>For us, with our flat file data system, what defines our data content structure are our &#8220;delimitation&#8221; decisions, as per &#8230;<\/p>\n<ul>\n<li>one database (data source) will be defined via (our) one (big) flat file (with internally controlled naming and path decision system &#8230; ie. we control all <a target=_blank title='Data definition language information from Wikipedia ... thanks' href='https:\/\/en.wikipedia.org\/wiki\/Data_definition_language'>DDL<\/a> (Data definition language) internally) record delimited by ` character (to any other database (data source)) &#8230; and may throw in an Ascii character 10 (line feed) before its end delimitation, for &#8220;internal use only&#8221; clarity, and regarding the rule &#8220;database names may not contain Ascii character 10 (line feed)&#8221;<\/li>\n<li>one data table will be delimited within the database record as its first column above by | character (ie. in our flat file system design one database has one database table) &#8230; which maps to &#8220;[table]&#8221; above &#8230; and may throw in an Ascii character 10 (line feed) before its end delimitation, for &#8220;internal use only&#8221; clarity, and regarding the rule &#8220;database table names may not contain Ascii character 10 (line feed)&#8221;<\/li>\n<li>one data table [Comma separated Column List] will be delimited within the database record as its second column &#8230; and may throw in an Ascii character 10 (line feed) before its end delimitation, for &#8220;internal use only&#8221; clarity, and regarding the rule &#8220;column names may not contain Ascii character 10 (line feed)&#8221;<\/li>\n<li>one data table&#8217;s third column will be set aside for application specific data, as required &#8230; and may throw in an Ascii character 10 (line feed) before its end delimitation, for &#8220;internal use only&#8221; clarity, and regarding the rule &#8220;application specific data may not contain Ascii character 10 (line feed)&#8221;<\/li>\n<li>one data table&#8217;s row data source records will be delimited within the database record as its fourth column, delimited from each other by the ~ character, and between &#8220;data values&#8221; by the Comma character &#8230; and may throw in an Ascii character 10 (line feed) after its final &#8220;end of all rows&#8221; delimitation, for &#8220;internal use only&#8221; clarity, and regarding the rule &#8220;database names may not contain Ascii character 10 (line feed)&#8221;<\/li>\n<\/ul>\n<p> &#8230; and by which you can infer &#8230;<\/p>\n<ul>\n<li>we are going to disallow ~ and ` and Comma (ie. &#8220;,&#8221;) and | from being allowed in &#8220;data values&#8221; above, period <font size=1>&#8230; sorry to all lovers of the Comma character (but we think, later, anyway, we may relent on this restriction &#8230; but, for now &#8230;)<\/font><\/li>\n<li>for &#8220;internal use only, but also for sanity&#8221; purposes, at appropriate places we can place Ascii character 10 (line feeds), as we rabbitted on about above<\/li>\n<\/ul>\n<p>Today&#8217;s &#8220;Primer Tutorial&#8221; job is to take some &#8220;flat file system&#8221; data, and parse it (ie. via a &#8220;passed in&#8221; SQL statement).<\/p>\n<ol>\n<li>If you don&#8217;t already have <a target=_blank title='MAMP local Apache\/PHP\/MySql web server' href='http:\/\/mamp.info'>MAMP<\/a> installed, consider installing MAMP and following steps below &#8230; else ignore steps below and click <a target=_blank title='Live run' href='http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_engine.php?sql=SELECT+*+FROM+ourdatatable2'>this link<\/a> to see the equivalent www.rjmprogramming.com.au domain version of what is happening below &#8230;<\/li>\n<li>Take (ie. copy into a buffer) today&#8217;s &#8220;first draft&#8221; <a target=_blank title='flat_file_engine.php' href='http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_engine.php_GETME'>flat_file_engine.php<\/a> and save it to the directory of MAMP equating (most likely) to http:\/\/localhost:8888\/ (which is \/Applications\/MAMP\/htdocs on this MacBook Pro) with the name flat_file_engine.php<\/li>\n<li>Take (ie. copy into a buffer) the &#8220;flat file system&#8221; proposed data &#8230;\n<p><code><br \/>\nourdatatable1<br \/>\n|col1_1,col2_1,col3_1<br \/>\n|internal1_1,internal2_1<br \/>\n|r1c1_1,r1c2 1,r1c3_1~r2c1_1,r2c2_1,r2c3_1~r3c1_1,r3c2_1,r3c3_1~r4c1_1,r4c2_1,r4c3_1<br \/>\n`<br \/>\nourdatatable2<br \/>\n|col1_2,col2_2,col3_2<br \/>\n|internal1_2,internal2_2<br \/>\n|r1c1_2,r1c2_2,r1c3_2~r2c1_2,r2c2_2,r2c3_2~r3c1_2,r3c2_2,r3c3 2~r4c1_2,r4c2_2,r4c3_2<br \/>\n`<br \/>\n<\/code>\n<\/li>\n<li>Save this data to that same directory of MAMP equating (most likely) to http:\/\/localhost:8888\/ (which is \/Applications\/MAMP\/htdocs on this MacBook Pro) and call it flat_file.dat<\/li>\n<li>Make sure MAMP is up and running &#8230; then &#8230;<\/li>\n<li>At your favoured web browser&#8217;s address bar type (most likely) http:\/\/localhost:8888\/flat_file_engine.php?sql=SELECT+*+FROM+ourdatatable2<\/li>\n<\/ol>\n<p>And when you do, do you get the look of the orange part of today&#8217;s <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/flat_file_engine.jpg\" title=\"Tutorial picture\">tutorial picture<\/a>?  We hope so.  But early days with functionality here.<\/p>\n<p>As you can see above, the mechanisms to do &#8220;flat file data system&#8221; work can be very easy to get up and running.<\/p>\n<p>Food for thought, perhaps?<\/p>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d29728' onclick='var dv=document.getElementById(\"d29728\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/sql\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d29728' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d29763' onclick='var dv=document.getElementById(\"d29763\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/flat-file\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d29763' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d29785' onclick='var dv=document.getElementById(\"d29785\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/ddl\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d29785' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d29793' onclick='var dv=document.getElementById(\"d29793\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/poll\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d29793' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d29807' onclick='var dv=document.getElementById(\"d29807\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/database\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d29807' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d29819' onclick='var dv=document.getElementById(\"d29819\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/database\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d29819' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Do you recall a statement in this blog posting thread&#8217;s &#8220;primer&#8221; tutorial as per &#8230; data type &#8220;smarts&#8221; &#8230; we&#8217;re keeping it really &#8220;everything ends up as a string&#8221; &#8230; doh &#8230; simple, for now, with our flat file data &hellip; <a href=\"https:\/\/www.rjmprogramming.com.au\/ITblog\/sql-for-flat-files-data-type-tutorial\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,12,31,37],"tags":[1824,230,1785,2053,299,304,2147,1576,2184,418,2137,2131,513,518,1577,1560,744,752,827,932,938,944,961,997,1075,1186,1319],"class_list":["post-29819","post","type-post","status-publish","format-standard","hentry","category-database","category-elearning","category-projects","category-tutorials","tag-character","tag-column","tag-data-source","tag-data-table","tag-database-2","tag-ddl","tag-delimiter","tag-dml","tag-fibonacci","tag-file","tag-flat-file","tag-golden-ratio","tag-google","tag-google-chart","tag-interface","tag-language","tag-mamp","tag-mathematics","tag-mysql","tag-php","tag-phpmyadmin","tag-pie-chart","tag-poll","tag-programming","tag-row","tag-sql","tag-tutorial"],"_links":{"self":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/29819"}],"collection":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/comments?post=29819"}],"version-history":[{"count":3,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/29819\/revisions"}],"predecessor-version":[{"id":29829,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/29819\/revisions\/29829"}],"wp:attachment":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/media?parent=29819"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/categories?post=29819"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/tags?post=29819"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}