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
 
 
LinkBack Thread Tools Search this Thread Display Modes
Prev Previous Post   Next Post Next
Old 12-30-2008, 02:42 AM   #1 (permalink)
The Prestige
Upcoming Programmer Inquisitive 
 
Tanax's Avatar
 
Join Date: Sep 2007
Location: Sweden, Stockholm
Posts: 1,080
Thanks: 115
Tanax is on a distinguished road
Default The SQL Class

Hi!

Just thought I'd create a thread for the SQL class.
This is what I have so far. Please come with suggestions or submit updated code if you feel that you wish to help out.

php Code:
<?php

    class DBmysql {
       
        private $host;
        private $user;
        private $pass;
        private $data;
        private $con;
       
        private $query_sql;
        private $query_result;   
        private $query_fetch = array();
       
        /**
         * Basic description:
         * Sets the connection details
         *
         * Conditions:
         * -
         *
         * Detailed description:
         * -
         *
         * @param array $array
         * @return $this
         */

        public function setHandler($host, $user, $pass, $data)
        {
           
            $this->host = $host;
            $this->user = $user;
            $this->pass = $pass;
            $this->data = $data;
           
            return $this;
           
        }
       
        /**
         * Basic description:
         * Connects to the database using the connection details set by setHandler function
         *
         * Conditions:
         * You have to set the connection-values with setHandler before using this function
         *
         * Detailed description:
         * -
         *
         * @return $this
         */

        public function connect()
        {
           
            $this->con = mysql_connect($this->host, $this->user, $this->pass);

            if($this->con) return $this;
            else return false;
           
        }
       
        /**
         * Basic description:
         * Selects the database using the connection details set by setHandler function
         *
         * Conditions:
         * The mysql has to be connected
         *
         * Detailed description:
         * -
         *
         * @return $this
         */

        public function select()
        {
           
            if(mysql_select_db($this->data, $this->con)) return $this;
           
            else return false;
           
        }
       
        /**
         * Basic description:
         * Disconnects the current connection
         *
         * Conditions:
         * The mysql has to be connected
         *
         * Detailed description:
         * -
         *
         * @return true or false
         */

        public function disconnect()
        {
           
            if(mysql_close($this->con)) return true;
           
            else return false;
           
        }
       
        /**
         * Basic description:
         * Loads a query, specified in the parameter
         *
         * Condition:
         * -
         *
         * Detailed description:
         * -
         *
         * @param string $query
         * @return $this
         */

        public function loadQuery($query)
        {
           
            $this->query_sql = $query;
           
            return $this;
           
        }
       
        /**
         * Basic description:
         * Executes a query
         *
         * Conditions:
         * You have to load a query before using this function
         *
         * Detailed description:
         * If you haven't loaded a query, you can set the first parameter to the sql statement and it will load the query automaticly
         *
         * @param string(optional) $sql
         * @return $this
         */

        public function exeQuery($sql = NULL)
        {
           
            if($sql == NULL)
            {
               
                if(isset($this->query_sql))
                {
               
                    $this->query_result = mysql_query($this->query_sql, $this->con);
                   
                    if($this->query_result) return $this;
                    else return false;
                   
                }
               
                else return false;
               
            }
           
            elseif($sql != NULL)
            {
               
                $this->loadQuery($sql)->exeQuery();
                   
            }
           
            else return false;
           
           
        }
       
        /**
         * Basic description:
         * Gets the results from the query
         *
         * Conditions:
         * You have to execute a query before you can use this function
         *
         * Detailed description:
         * -
         *
         * @return $this->query_result
         */

        public function getQueryResult()
        {
           
            if(isset($this->query_result)) return $this->query_result;
           
            else return false;
           
        }
       
        /**
         * Basic description:
         * Loads and executes a fetch array
         *
         * Conditions:
         * You have to execute a query before you can use this function
         *
         * Detailed description:
         * If you want it to fetch the array as ASSOC, you need to specify that by setting the first parameter to true.
         * If you haven't executed an query, you can set the second parameter to the sql statement and it will execute the query automaticly
         *
         * @param boolean(optional) $assoc
         * @param string(optional) $sql
         * @return $this
         */

        function loadFetch($assoc = false, $sql = NULL)
        {
       
            unset($this->query_fetch);
            empty($this->query_fetch);
       
            $sql = (is_null($sql) && isset($this->query_result)) ? $this->query_result : $this->exeQuery($sql)->getQueryResult();
            $fetchType = ($assoc == true) ? MYSQL_ASSOC : MYSQL_NUM;
       
            if(!empty($sql))
            {
               
                while($fetch = mysql_fetch_array($sql, $fetchType))
                {
                   
                    $this->query_fetch[] = $fetch;
                   
                }
       
                if(is_array($this->query_fetch)) return $this;
                else return false;
                
            }
            
            else return false;
       
        }
       
        /**
         * Basic description:
         * Gets the results from the loaded fetch
         *
         * Conditions:
         * You have to load the fetch by using loadFetch before using this function
         *
         * Detailed description:
         * If you haven't loaded the fetch, you can autoload it by setting the first parameter to true.
         * If autoload is set to true, you can specify if you want to fetch the array as assoc by setting the second parameter
         * to true or false.
         *
         * If autoload is set to true, you can specify the sql statement if you haven't already executed the query like this (example):
         * $fetch = $db->exeQuery($sql)->getFetch(true, true);
         *
         * You can, as said, skip the exeQuery function by specifying the sql parameter in this function like this (example):
         * $fetch = $db->getFetch(true, true, $sql);
         *
         * @return $this->query_fetch
         */

        public function getFetch($autoload = false, $assoc = false, $sql = NULL)
        {
           
            if($autoload == false)
            {
               
                if(is_array($this->query_fetch) && isset($this->query_fetch)) return $this->query_fetch;
               
                else return false;
               
            }
           
            else
            {
               
                $this->loadFetch($assoc, $sql)->getFetch();
               
            }
           
        }
       
        /**
         * Basic description:
         * Gets the number of rows
         *
         * Conditions:
         * A query must be specified, either in the parameter, or a previously executed query
         *
         * Detailed description:
         * You can get the number of rows the query returned in 2 ways, either by executing a query before using this function, like this (example):
         * $numrows = $db->exeQuery($sql)->getRows();
         *
         * Or by setting the parameter to the sql statement, like this (example):
         * $numrows = $db->getRows($sql);
         *
         * @param string(optional) $query
         * @return number of rows based on the query
         */

        public function getRows($query = NULL)
        {
           
            if(is_null($query))
            {
           
                if(isset($this->query_result))return mysql_num_rows($this->query_result);
                else return false;
               
            }
           
            else
            {
               
                $this->loadQuery($query)->exeQuery()->getRows();
               
            }
           
        }
       
        /**
         * Basic description:
         * Secures a string against possible mysql injections
         *
         * Conditions:
         * The parameter must be set
         *
         * Detailed description:
         * If the parameter is set to an int, it will return just the integer without cleaning it.
         * If the parameter is set to a string, it will clean the string from mysql injection before returning it
         *
         * @param string $string
         * @return $secured
         */

        public function secure($string)
        {
           
            if(is_string($string))
            {
               
                get_magic_quotes_gpc() ? $secured = stripslashes($string) : $secured = addslashes($string);
                function_exists('mysql_real_escape_string') ? $secured = mysql_real_escape_string($secured) : $secured = mysql_escape_string($secured);
               
            }
           
            elseif(is_numeric($string)) $secured = $string;
            else return false;
           
            return $secured;
                       
        }
       
    }



?>

Howto use:
PHP Code:
$db = new DBmysql(); 
Set connection, connect and select db:
PHP Code:
$db->setHandler('localhost''root''''testdb')->connect()->select();

//or if you don't want to use singleton
$db->setHandler('localhost''root''''testdb');
$db->connect();
$db->select(); 
For future reference, I will use singleton all the way. You can however choose not to use it.

Execute query:
PHP Code:
$sql "DELETE * FROM `table`";

//There's alot of ways you can do this, here's one way:
$db->loadQuery($sql)->exeQuery();

//Here's another way:
$db->exeQuery($sql); 
Retrieve query result:
PHP Code:
$sql "SELECT * FROM `table`";

//1:
$result $db->loadQuery($sql)->exeQuery()->getQueryResult();

//2:
$result $db->exeQuery($sql)->getQueryResult(); 
Fetch something as an array:
PHP Code:
$sql "SELECT * FROM `table`";

//1:
$fetch $db->loadQuery($sql)->exeQuery()->loadFetch()->getFetch();

//2:
$fetch $db->exeQuery($sql)->loadFetch()->getFetch();

//3, if you remove the loadFetch function, you must set the first parameter in getFetch to true:
$fetch $db->exeQuery($sql)->getFetch(true);

//4, if you skip the exeQuery function and the loadFetch function, you must set the first parameter in getFetch to true, and the third parameter to the SQL statement:
$fetch $db->getFetch(true, , $sql);

//You can also decide if you want to use MYSQL_ASSOC:
$fetch $db->getFetch(truetrue$sql);

//or:
$fetch $db->exeQuery($sql)->loadFetch(true)->getFetch(); 
Check num rows:
PHP Code:
$sql "SELECT * FROM `table`";

//1:
$rows $db->exeQuery($sql)->getRows();

//2:
$rows $db->getRows($sql); 
Using secure method:
PHP Code:
$string "' OR 1 = 1'";
$int 2;

//Will clean the string from the mysql-injection
$secure_string $db->secure($string);

//Will return int's as they are
$secure_int $db->secure($int); 
__________________

Last edited by Tanax : 01-16-2009 at 12:25 PM.
Tanax is offline  
Reply With Quote
 



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
[Tutorial] How to organize your classes | Part 1 Tanax Advanced PHP Programming 10 03-01-2009 10:08 PM
A Generic Singleton Base Class Theo Advanced PHP Programming 7 08-18-2008 02:25 AM
[Tutorial] Basic tutorial about class basics Tanax Absolute Beginners 14 07-24-2008 01:37 PM
PHP5 Classes A to Z Part 1 quantumkangaroo Advanced PHP Programming 11 04-01-2008 04:21 AM
Tutorial: PHP and OOP, a beginners guide Village Idiot Tips & Tricks 0 09-06-2007 04:23 PM


All times are GMT. The time now is 07:16 AM.

 
     

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