Activity Stream
48,167 MEMBERS
6755 ONLINE
besthostingforums On YouTube Subscribe to our Newsletter besthostingforums On Twitter besthostingforums On Facebook besthostingforums On facebook groups

Results 1 to 2 of 2
  1.     
    #1
    Member
    Website's:
    litewarez.net litewarez.com triniwarez.com

    Default Tutorial [Creating a PHP Framework] {advanced} (PART 4)

    Database Extraction Layer

    heya all, hers part 4 of my framework tutorial and today were going to be looking at Database Extraction

    Now when i say Database Extraction what im talking about is a kind of layer between your php and your database!

    now most people just do mysql query where its needed.. but the problem with this is, you have to change it for every query.. with the DBL you only have to do it within the object were about to create, thus changing for all your queries across the site !

    heres a visual example so you can understand!

    As you can see the process above shows why a database extraction layer is good!

    You "Pages" asks the "Registry" to send a command to the "DBL" witch then calls the supplies method and talks to the MySQL server! witch returns the data

    ok so in this object were going to build as follows
    • Connection Handler
    • Query handler
    • Looping handles (auto loop resuslts so you dont have to)
    • Free Results
    • Connection desctruct


    The result we want to achieve is to have have to only do 1 line of code in our view pages and fetch back an array of results!

    Any way enough explaining already lets start doing something !

    We need to create a config file to hold our database connection info in so lets go ahead and do that !

    Create a new file called config.php

    Add this code and populate with your database server information!

    PHP Code: 
    <?php
    if(!defined('BASE_PATH')){exit;} // always remember ppl

    /*
        * The reason the config is an stdClass is so its an object like everything else within the registry
    */
    $_CONFIG = new stdClass();

    //Create a blank stdClass for the database

    $_CONFIG->database = new stdClass();

    //Lets add some configs
    $_CONFIG->database->hostname 'localhost';
    $_CONFIG->database->username 'root';
    $_CONFIG->database->password '';
    $_CONFIG->database->database 'myFramework';

    //Also lets set a charset
    $_CONFIG->database->charset 'UTF8';

    //All other config infoirmation will be here as we go along!
    ?>
    Ok save to Save the file in /system/Config.php


    ok so now thats save we can add it to our registry!

    NOTE: Always set the config to the registry FIRST so object constructors can have full use of them as there primary object

    Ok open up your startup.php file now and do the following

    Find:
    PHP Code: 
    include SYSTEM_BASE_PATH '/engine/Input.php'
    Add before:
    PHP Code: 
    include . SYSTEM_BASE_PATH '/Config.php'
    Now we need to add it to the registry so

    Find:

    PHP Code: 
    Registry::set('Input', new Input()); 
    Add before:
    PHP Code: 
    Registry::set('Config'$_CONFIG); 
    Ok so now we have the config included we can access it anywhere within the scope of the script with

    PHP Code: 
    Registry::get('Config')

    //Or for database
    Registry::get('Config')->database 
    OK save all files and everything should be all gravy!!


    Ok now lets move on to the DBL!

    Firstly let me say that were not going to do an auto connect because some pages we might not use a database so it will save resources in that sence!

    PHP Code: 
    <?php
    if(!defined('BASE_PATH')){exit;}

    Class 
    Database{

        
    //holder for DB settings, Private so hackers cant get then from an external method like RFI
        
    private $config;

        
    //Resource containers
        
    private $connection false;
        private 
    $database_selection false;
        private 
    $query false// this will hold the query resource so we can do method passing

        
    function __construct()
        {
            
    //We get the settings and store them in a private var, also removing old ones
            
    $this->config Registry::get('Config')->database;        
            
    Registry::get('Config')->database false;
        }

        
    /*
            Heres the connect function!
        */

        
    public function connect()
        {
            
    //Firstly connection
            
    $this->__connect();

            
    //Now select DB
            
    $this->__selectDatabase();

            
    //Set database charsets as defined in config!
            
    $this->query(sprintf("SET NAMES %s",$this->config->charset));
            
    $this->query(sprintf("SET CHARACTER SET %s",$this->config->charset));
            
    $this->query(sprintf("SET CHARACTER_SET_CONNECTION = utf8",$this->config->charset));
            
    $this->query("SET SQL_MODE = '' ");
        }

        
    //Ok lets build a mysql_query function
        
    public function query($query)
        {
            if(
    $this->isReady())
            {
                
    $this->query mysql_query($query) or trigger_error('Error perforing last query! : ' mysql_error(),E_USER_ERROR);

                
    //We will return true because if if theres no error triggered then must be true!
                
    return true;
            }
        }

        
    //ok theres the query out the way lets do a fetch associative method
        
        
    public function getAssoc() //* means array of all results
        
    {
            if(
    $this->query// make sure we have a query
            
    {
                
    //We create a blank class to hold multiple information in
                
    $results = new stdClass();

                
    //Get the number of rows
                
    $results->count $this->getNumRows();

                
    //Create a blank array to hold all the rows within
                
    $results->rows = array();

                
    //Loop the results
                
    while($row $this->getSingleRow())
                {
                     
    $results->rows[] = $row;
                }

                
    //Here we can set the first row into its own variable if needed
                
    $results->first_row = (isset($results->rows[0]) ? $results->rows[0] : false);

                
    //return the object to the initial call
                
    return $results;
            }
        }

        public function 
    getSingleRow()
        {
            if(
    $this->query)
            {
                return 
    mysql_fetch_assoc($this->query,$this->connection);
            }
        }

        public function 
    getNumRows()
        {
            if(
    $this->query)
            {
                return 
    mysql_num_rows($this->query,$this->connection);
            }
        }

        
    //We can use to check if we were able to make queries 
        
    public function isReady()
        {
            return (
    $this->connection !== false && $this->database_selection !== false);
        }

        private function 
    __selectDatabase()
        {
            if(
    $this->connection)
            {
                
    $this->database_selected mysql_select_db($this->config->database,$this->connection);
                
    //Make sure we have selected a database
                
    if(!$this->database_selection)
                {
                    
    trigger_error('Could not find database',E_USER_ERROR);
                }
            }else
            {
                
    trigger_error('Attempted to select a database with no connection',E_USER_ERROR);
            }
        }    

        private function 
    __connect()
        {
            return 
    $this->connection mysql_connect(
                
    $this->config->hostname,
                
    $this->config->username,
                
    $this->config->password
            
    ) or trigger_error('Mysql connection failure',E_USER_ERROR);
        }

        function 
    __desctruct()
        {
            if(
    $this->connection)
            {
                
    mysql_close($this->connection);
            }

            
    //unset avariables
            
    unset($this->config,$this->database_selection,$this->query);
        }

    }
    ?>

    Ok so there you have it, a simple abstraction layer that we will work with more later on for things like security ect!

    for now we need to save the file as follows

    system/engine/Database.php

    and then we include in the startup file! you should know how to do that by now

    and follow by the adding the database to the registry with!

    PHP Code: 
    Registry::set('Database',new Database()); 
    heres an example of why its so important to have a DBL

    its pretty simple to use, just do the following in your view pages!

    PHP Code: 
    <?php

    //include the startup etc

    $database Registry::get('database');

    //Connect
    $database->connect();

    //Query
    $database->query('SELECT * FROM downloads');

    //no need for loops in view pages
    $reuslts $database->getAssoc();

    //Remember we have first row,count,and all rows help in the $results stdClass
    ?>
    litewarez Reviewed by litewarez on . Tutorial [Creating a PHP Framework] {advanced} (PART 4) Database Extraction Layer heya all, hers part 4 of my framework tutorial and today were going to be looking at Database Extraction Now when i say Database Extraction what im talking about is a kind of layer between your php and your database! now most people just do mysql query where its needed.. but the problem with this is, you have to change it for every query.. with the DBL you only have to do it within the object were about to create, thus changing for all your queries across the Rating: 5
    Join Litewarez.net today and become apart of the community.
    Unique | Clean | Advanced (All with you in mind)
    Downloads | Webmasters


    Notifications,Forum,Chat,Community all at Litewarez Webmasters


  2.   Sponsored Links

  3.     
    #2
    Member
    Website's:
    pspmafia.com zrev.net
    Great tutorials man, you really helped me out so much. Thanks a ton!
    Trusted & Respected Members:
    ACiD | Narutoroot | JmZ | Jackson | Phamous | litewarez





Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. Replies: 5
    Last Post: 19th Feb 2010, 06:38 PM
  2. Tutorial [Creating a PHP Framework] {advanced} (PART 5) - Sessions
    By litewarez in forum Tutorials and Guides
    Replies: 1
    Last Post: 12th Feb 2010, 03:06 PM
  3. Tutorial [Creating a PHP Framework] {advanced} (PART 3)
    By litewarez in forum Tutorials and Guides
    Replies: 1
    Last Post: 4th Feb 2010, 02:12 AM
  4. Tutorial [Creating a PHP Framework] {advanced} (PART 2)
    By litewarez in forum Tutorials and Guides
    Replies: 2
    Last Post: 3rd Feb 2010, 05:37 AM
  5. Tutorial [Creating a PHP Framework] {advanced} (PART 1)
    By litewarez in forum Tutorials and Guides
    Replies: 1
    Last Post: 30th Jan 2010, 03:37 PM

Tags for this Thread

BE SOCIAL