PHP Classes

File: classes/mysqlez.php

Recommend this page to a friend!
  Classes of Dwaine Halberg  >  mySQLEz  >  classes/mysqlez.php  >  Download  
File: classes/mysqlez.php
Role: Class source
Content type: text/plain
Description: mySQLEz Class
Class: mySQLEz
MySQL database access wrapper
Author: By
Last change:
Date: 10 years ago
Size: 15,935 bytes
 

Contents

Class file image Download
<?php
//deny direct access to included files
if( basename( __FILE__ ) == basename( $_SERVER['PHP_SELF'] ) )
{
  exit();
}
/**
 *  @file name: mysqlez.php
 *
 *  @creation date: 06/08/2010
 *
 *  @author: Dwaine Halberg
 *
 *  @company: Autumn Hail
 *
 *  @file ver 1.5
 *
 *  @rev date: 10/07/2011
 *
 *  @desc:
 *      mySQLEz db abstraction class
 *      makes it easy to perform
 *      crud to a mySQL Database.
 *
 *  @license: dbad (don't be a dick!)
 *  http://dbad-license.org/
 *  otherwise modifiy away and enjoy!!
 *
 **/

    /**
     *  @class: mySQLEz class
     *
     *  @desc: Easy MySQL Database abstraction layer
     *
     *  @methods: total = 17
     *  	__construct()
     *  	getInstance()
     *  	__clone()
     *          dbConnect()
     *          dbClose()
     *          dbFreeResult()
     *          dbEscape()
     *          dbQueryOrDie()
     *          doSQL()
     *          doInsert()
     *          doUpdate()
     *          doDelete()
     *          fetchObj()
     *          fetchArray()
     *          fetchRow()
     *          fetchCount()
     *          varDump()
     *
     **/

class mySQLEz
{
        /**
         * @class vars
         *
         * @desc: defines vars base states
         *
        **/
        protected	$dbUser         = '';
        protected	$dbPass         = '';
        protected	$dbHost         = '';
        protected	$dbName         = '';  
        protected	$queryResult	= NULL;
        
	private  	$lastError	= NULL;
	private  	$lastQuery	= NULL;	
	private		$dbo		= NULL;
	
	private static $instance	= NULL;

        /**
	 * @const: DB_CLASS_VER
	 * 
         * @desc:
         * Class version constant for Exceptions
         *
         * @params"
         * DB_CLASS_VER  = "current version"
         *
         **/
        const DB_CLASS_VER  = '1.5';

        /**
         * @method: function __construct()
         *
         * @desc: Class Constructor
         *
         * #params: $dbHost: string
         *          $dbUser: string
         *          $dbPass: string
         *          $dbName: string
         *
         * @return: @dbo
         **/
        function __construct( $dbHost,$dbUser,$dbPass,$dbName )
        {
            $this->dbUser = $dbUser;
            $this->dbPass = $dbPass;
            $this->dbName = $dbName;
            $this->dbHost = $dbHost;
            
	    $this->dbConnect();
	    return $this->dbo;
        }

        /**
	 * @method: get Instance
	 * 
         * #desc: the single instance
         *
         * @return: Singleton
         */
        public static function getInstance()
        {
            if( self::$instance )
            {
               return self::$instance; 
            }
            return self::$instance = new self();
        }
        
        /**
	 * @method: PHP Magic Method clone
	 * 
         * @desc: Disallow cloning
         *
         */
        private function __clone(){}

        /**
         * @method: public function dbConnect()
         *
         * @desc: provides the database connection for the class
         *
         * @params: $dbHost: string
         *          $dbUser: string
         *          $dbPass: string
         *          $dbName: string
         *
         * @return: boolean: status
         **/
        public function dbConnect()
        {
            try
            {
                if( !$this->dbo = mysql_pconnect( $this->dbHost, $this->dbUser, $this->dbPass ) )
                {
                    throw new Exception( '<div><strong>Error: mySQLEz ( v '. self::DB_CLASS_VER .' ) could not connect to database, check the host "'.$this->dbHost.'", user "'.$this->dbUser.'", db "'.$this->dbName.'", and password "******" are correct.</strong></div>' );
                }
                if( !mysql_select_db( $this->dbName, $this->dbo ) )
                {
                    throw new Exception( '<div><strong>Error: mySQLEz ( v '. self::DB_CLASS_VER .' ) could not select database, check the database name is correct "'.$this->dbName.'".</strong></div>' );
                }
            }

                catch( Exception $e )
                {
                    die( $e->getMessage() );
                }
        }

        /**
         * @method:  public function dbClose()
         *
         * @desc: closes active database connection
         *
         * @params: void
         *
         * @return: boolean: status
         **/
        public function dbClose()
        {
            return mysql_close( $this->dbo );
        }

        /**
         * @method:  private function dbFreeResult()
         *
         * @desc: free results to conserve memory
         *
         * @params: $query
         *
         * @return: boolean: status
         **/
        private function dbFreeResult( $query )
        {
            return mysql_free_result( $query );
        }

	/**
	 * @method: flush
	 *
	 * @desc:
	 * Delete cached queries
	 *
	**/
	private function flush()
	{
	    /** dump this **/
	    $this->lastResult 	= NULL;
	    $this->lastQuery 	= NULL;
	}

        /**
         * @method: public function dbEscape()
         *
         * @desc: escapes data for safe insert
         *
         * @param:
         * $str - string
         * $like - string
         *
         * @return: string
         **/
        public function dbEscape( $str, $like = FALSE )
        {
	    if( !ini_get( 'magic_quotes_gpc' ) )
	    {
		if( is_array( $str ) )
		{
		    foreach ( $str as $key => $val )
	   	    {
			$str[$key] = $this->dbEscape( $val, $like );
	   	    }
	   	    return $str;
	   	}

		if( function_exists('mysql_real_escape_string' ) )
		{
		    $str = mysql_real_escape_string( $str );
		}
		elseif( function_exists( 'mysql_escape_string' ) )
		{
		    $str = mysql_escape_string( $str );
		}
		else
		{
		    $str = addslashes( $str );
		}

		// escape LIKE conditions
		if( $like === TRUE )
		{
		    $str = str_replace( array( '%', '_' ), array( '\\%', '\\_' ), $str );
		}
		return $str;
	    }
        }

        /**
         * @method: private function queryOrDie()
         *
         * @desc: private function todo queries against
         *
         * @params:
         * $query	- string mixed
         *
         * @return $sql results or error!
         **/
        private function queryOrDie( $query )
        {
	    /** flush cached values **/
	    $this->flush();

	    /** keep the last query for debug **/
	    $this->lastQuery = $query;

            $queryResult = mysql_query( $query, $this->dbo );
                try
                {
                    if( !$queryResult )
                    {
                        throw new Exception( '<div><strong>Error: There is problem with your query statement:</strong><br /><h4>"'.$query.'"</h4></div>' );
                    }
                    else
                    {
                        return $queryResult;
                        $this->dbFreeResult( $queryResult );
                    }
                }
                catch( Exception $e )
                {
                    echo $e->getMessage();
                }
        }

        /**
         * @method: public function doSQL()
         *
         * @desc: user defined sql queries
         *
         * @params:
         * $sql		- string
         *
         * @return $results - array
         **/
        public function doSQL( $sql )
        {
	    /** log how the function was called **/
	    $this->funcCall = "\$db->doSQL( \"$queryOrDie\", $output )";

            $results = $this->dbEscape( $this->queryOrDie( $sql ) );

                if( $results == '' && mysql_affected_rows() != -1 )
                {
                    return FALSE;
                }
            return $results;
        }
      
        /**
         * @method: public function doInsert()
         *
         * @desc: takes care of insert queries
         *
         * @params:
         * $table	- string
         * $postVals	- post array mixed
         *
         * @return boolean
         **/
        public function doInsert( $table, $postVals )
        {
	    /** log how the function was called **/
	    $this->funcCall = "\$db->doInsert( \"$queryOrDie\", $output )";
	    
	    //loop through post values and create sql statement
            foreach( $postVals as $key=>$value )
            {
                $newRow[] = $key.'=\''.$value.'\'';
            }
                $newRow = implode( ',', $newRow );
  
                $this->dbEscape( $sql = "INSERT INTO $table SET $newRow" );
                
                $result = $this->queryOrDie( $sql );

	    //check to see if the update was successful or not
            if( $result =='' && mysql_affected_rows() != -1 )
            {
                return FALSE;
            }
            return TRUE;
        }
        
        /**
         * @method: public function doUpdate()
         *
         * @desc: takes care of update queries
         *
         * @params:
         * $table	- string
         * $keyColName	- string
         * $id		- mixed
         * $postVals	- post array - mixed
         *
         * @return boolean
         **/
        public function doUpdate( $table, $keyColName, $id, $postVals )
        {
	    /** log how the function was called **/
	    $this->funcCall = "\$db->doUpdate( \"$queryOrDie\", $output )";
	    
	    //loop through post values and create sql statement
            foreach( $postVals as $key=>$value )
            {
                $newRow[] = $key.'=\''.$value.'\'';
            }
                $newRow = implode( ',', $newRow );
                
                $this->dbEscape( $sql = "UPDATE $table SET $newRow WHERE $keyColName = '$id'" );

                $result = $this->queryOrDie( $sql );

	    //check to see if the update was successful or not
            if( $result =='' && mysql_affected_rows() != -1 )
            {
                return FALSE;
            }
            return TRUE;
        }
         
        /**
         * @method: public function dodelete()
         *
         * @desc: takes care of delete queries
         *
         * @params:
         * $table	- string
         * $id		- int
         *
         * @return: boolean
         **/
        public function doDelete( $table, $id )
        {
	    /** log how the function was called **/
	    $this->funcCall = "\$db->dodelete( \"$queryOrDie\", $output )";
	    
            $this->dbEscape( $sql = "DELETE FROM $table WHERE id = (int)$id" );
            
            $result = $this->queryOrDie( $sql );

                if( !$result )
                {
                    return FALSE;
                }
            return TRUE;
        }
        
        /**
         * @method: public function fetchObj()
         *
         * @desc: queries tables for full result sets with sorts
         *
         * @params:
         * $sql		- string mixed
         *
         * @return: object
         **/
        public function fetchObj( $sql )
        {
	    /** log how the function was called **/
	    $this->funcCall = "\$db->fetchObj( \"$queryOrDie\", $output )";
	    
            $this->dbEscape( $r = $this->queryOrDie( $sql ) );
            
            $results = array();
            while( $rows = @mysql_fetch_object( $r ) )
            {
                $results[] = $rows;
            }

            if( !$results )
            {
                return FALSE;
            }
            return $results; 
        }

        /**
         * @method: public function fetchAssoc()
         *
         * @desc: queries tables for full result sets with sorts
         *
         * @params:
         * $sql - string  mixed
         *
         * @return: array MYSQL_NUM, MYSQL_ASSOC, MYSQL_BOTH
         **/
        public function fetchArray( $sql, $arrayType )
        {
	    /** log how the function was called **/
	    $this->funcCall = "\$db->fetchArray( \"$queryOrDie\", $output )";
	    
            $this->dbEscape( $r = $this->queryOrDie( $sql ) );
		
            while( $rows = @mysql_fetch_array( $r, $arrayType ) )
            {
                $results[] = $rows;
            }
            
	    if( !$results )
            {
                return FALSE;
            }
            return $results; 
        }

        /**
         * @method: public function fetchRow()
         *
         * @desc: queries tables for row result sets by id
         *
         * @params:
         * $table	- string
         * $fields	- mixed
         * $keyColName	- string
         * $id		- int
         *
         * @return: single row of results as objects
         **/
        public function fetchRow( $table, $fields='*', $keyColName, $id )
        {
	    /** log how the function was called **/
	    $this->funcCall = "\$db->fetchRow( \"$queryOrDie\", $output )";
	    
            $this->dbEscape( $sql = "SELECT $fields FROM $table WHERE $keyColName = '$id' LIMIT 1" );
            $r = $this->queryOrDie( $sql );
		
	    $results = array();
            while( $row = @mysql_fetch_object( $r ) )
	    {
		$results[] = $row;
	    }

            if( !$results )
            {
                return FALSE;
            }
            return $results; 
        }

        /**
         * @method: public function fetchCount()
         *
         * @desc: queries tables for row result sets by id
         * wiht options where for tables with complex sorts
         *
         * @params:
         * $table	- string
         * $fields	- string
         * $keyColName	- string
         * $id		- int
         *
         * @return: results count
         **/
        public function fetchCount( $table, $fields='*', $keyColName, $id )
        {
	    /** log how the function was called **/
	    $this->funcCall = "\$db->fetchCount( \"$queryOrDie\", $output )";
	    
            $whereSql = '';
            if( $keyColName != '' ) $whereSql = "WHERE $keyColName = '$id'";
            $this->dbEscape( $sql = "SELECT $fields FROM $table " . $whereSql );
            $r = $this->queryOrDie( $sql );
            
            $count = @mysql_num_rows( $r );

            if( !$count )
            {
                return FALSE;
            }
            return $count; 
        }
	
	/**
	* @method: varDump
	*
	* @desc:
	* does a dump of any var to screen for debugging
	*
	* @params:
	* $mixed - data of all types
	*
	* @return:
	* html output
	*
	**/	
	public function varDump( $mixed )
	{
	    echo '<div><blockquote>';
	    echo '<pre>';
	    if ( !$this->vardumpCalled )
	    {
		echo '<h4 style="font-family: arial; color:#800080; font-size: 14px; font-weight: bold;">mySQLEz ( v '. mySQLEZ::DB_CLASS_VER .' ) Var Dump...</h4>';
	    }
	    echo '<p style="font-family: arial; color:#000090; font-size: 12px; font-weight: bold;">';
	    echo "<strong>Last Query:</strong> " . ( $this->lastQuery ? $this->lastQuery : "NULL" ) . "\n";
	    echo "<strong>Last Function Call:</strong> " . ( $this->funcCall ? $this->funcCall : "None" ) . "\n";
	    echo "<strong>Last Rows Returned:</strong> " . count( $this->lastResult ) . "\n";
	    echo '</font></p></pre></font></blockquote>';
	    print_r( $mixed );
	    echo '</div><br /><hr noshade color="ddd" size="1" />';
	    $this->vardumpCalled = TRUE;
	}
	
}//class closing tag
/* End of file mysqlez.php */
/* Location: /classes/mysqlez.php */
For more information send a message to info at phpclasses dot org.