TalkPHP
 
 
Account Login
Latest Articles
» The basic usage of PHPTAL, a XML/XHTML template library for PHP
» Vulnerable methods and the areas they are commonly trusted in.
» Simple way to protect a form from bot
» The Basics On: How Session Stealing Works
» How to keep your forms from double posting data
IRC Channel
IRC Speech Bubble Join the friendly bunch on IRC...
(#TalkPHP on Freenode)

...Also available via a web interface.

See this thread for information on the TalkPHP Free Hugs Initiative™. Subject to availability.
Associates
Associates
CSS Tutorials
Reply
 
LinkBack Thread Tools Search this Thread Display Modes
Old 03-23-2009, 01:13 PM   #1 (permalink)
The Wanderer
 
Join Date: Feb 2008
Location: Blackpool, England
Posts: 16
Thanks: 2
Andrial12 is on a distinguished road
Default Classes and MySQLi

I think its me missing a one of the major crux's of Object Orientated programming, but I've been looking for an answer to this problem for years now, and I've never been able to get a clear cut answer.

Here's a class that i've written:

PHP Code:
class model_element {
    
    var 
$id         0;
    var 
$name         NULL;
    var 
$xml         NULL;
    var 
$date         NULL;
    var 
$type         NULL;
    var 
$priority    0;

    function 
__construct($elements_id) {
    
        if(!empty(
$elements_id)) {
            
$object_database = new mysqli(CONFIG_DATABASE_SERVERCONFIG_DATABASE_USERCONFIG_DATABASE_PASSCONFIG_DATABASE_NAME_DEFAULT);
            
            
$object_result $object_database->query("
                SELECT
                    le.`elements_id`,
                    le.`elements_name`,
                    le.`elements_xml`,
                    le.`elements_date`,
                    le.`elements_type`,
                    le.`elements_priority`
                FROM
                    `lib_elements` AS le
                WHERE
                    le.`elements_id` = " 
$elements_id "
                ;
            "
);
            
            
$object_row $object_result->fetch_object();
            
            
$this->id             $object_row->elements_id;
            
$this->name         $object_row->elements_name;
            
$this->xml            $object_row->elements_xml;
            
$this->date         $object_row->elements_date;
            
$this->type         $object_row->elements_type;
            
$this->priority     $object_row->elements_priority;
        }
        
    }
    

Now this class will need to be called a few (5 - 20) times of the course of loading one page.

Now everytime this class is initiated the database connection is restarted.
PHP Code:
$object_database = new mysqli(CONFIG_DATABASE_SERVERCONFIG_DATABASE_USERCONFIG_DATABASE_PASSCONFIG_DATABASE_NAME_DEFAULT); 
Which i'm sure in not the best way to got about things.

So what am i missing about using a database in an Object Orientated fashion should model_element extend mysqli? Or is that wrong aswell.

Thanks for any help in advance.

Oli.
Andrial12 is offline  
Reply With Quote
Old 03-23-2009, 03:48 PM   #2 (permalink)
The Wanderer
 
Join Date: Feb 2008
Location: Blackpool, England
Posts: 16
Thanks: 2
Andrial12 is on a distinguished road
Default

It was actually pretty easy once I really thought about it. What i needed to do was call initiate MySQLi via a child class which uses the singleton pattern.

Somebody will Probably find this quite useful.

database.php
PHP Code:
class database extends mysqli 
    
    private static 
$instance null
    
    private function 
__construct($database_server$database_user$database_pass$database_name) { 
        @
parent::__construct
            
$database_server
            
$database_user
            
$database_pass
            
$database_name
        
); 
        if(
mysqli_connect_errno()) { 
            die(
'Could not Connect to database');
        } 
    } 
        
    public function 
getInstance($database_server$database_user$database_pass$database_name) { 
        if(
self::$instance === null) { 
            
$c __CLASS__
            
self::$instance = new $c($database_server$database_user$database_pass$database_name); 
        } 
        return 
self::$instance
    } 
    
    public function 
__clone() {
        die(
"Cannot clone ".__CLASS__." class"); 
    } 


model_element.php
PHP Code:
class mdl_element {
        
    var 
$id         0;
    var 
$name         NULL;
    var 
$xml         NULL;
    var 
$date         NULL;
    var 
$type         NULL;
    var 
$priority    0;

    function 
__construct($elements_id) {
    
        if(!empty(
$elements_id)) {
                
            
$object_result database::getInstance(CONFIG_DATABASE_SERVERCONFIG_DATABASE_USERCONFIG_DATABASE_PASSCONFIG_DATABASE_NAME_DEFAULT)->query("
                SELECT
                    le.`elements_id`,
                    le.`elements_name`,
                    le.`elements_xml`,
                    le.`elements_date`,
                    le.`elements_type`,
                    le.`elements_priority`
                FROM
                    `lib_elements` AS le
                WHERE
                    le.`elements_id` = " 
$elements_id "
                ;
            "
);
                
            
$object_row $object_result->fetch_object();
                
            
$this->id             $object_row->elements_id;
            
$this->name         $object_row->elements_name;
            
$this->xml            $object_row->elements_xml;
            
$this->date         $object_row->elements_date;
            
$this->type         $object_row->elements_type;
            
$this->priority     $object_row->elements_priority;
        }
        
    }
        

controller_element.php
PHP Code:
class ctl_element {

    var $element = array();
        
    function __construct($elements_id) {
        $this->element[] = new mdl_element($elements_id);
    }
        
    function display($xslt) {
        $xml =  "";
        $xml_temp = '<element language="en-GB"><id>0</id>' . $this->element[0]->xml;
        $xml_temp .= '<children>';
        for($i=0;$i<count($this->element[0]->children->children);$i++) {
            
            $xml_temp .= "<child>";
            $xml_temp .= $this->element[0]->children->children[$i]['xml'];
            $xml_temp .= "</child>";
            
        }
        $xml_temp .= '</children>';
        $xml_temp .= '</element>';
        $xml = '<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE exams SYSTEM "*DEAD LINK*"><exams>' . $xml_temp . '</exams>';
        
        return vw_createhtml($xml, $xslt);
    }
    
}

Last edited by Andrial12 : 03-26-2009 at 01:52 PM.
Andrial12 is offline  
Reply With Quote
Reply



Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On

Similar Threads
Thread Thread Starter Forum Replies Last Post
To abstract, or not to... delayedinsanity Advanced PHP Programming 5 02-27-2009 07:07 PM


All times are GMT. The time now is 04:23 PM.

 
     

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.1.0
Inactive Reminders By Icora Web Design