Login   Register  
PHP Classes
elePHPant
Icontem

File: MySQL

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Sandro Alves Peres  >  Utils  >  MySQL  >  Download  
File: MySQL
Role: Class source
Content type: text/plain
Description: Class MySQL
Class: Utils
Classes for accessing databases manipulating dates
Author: By
Last change: Improvement in transactions
Date: 2 years ago
Size: 11,323 bytes
 

Contents

Class file image Download
<?php
/**
  Implemented by Sandro Alves Peres
  sandrinhodobanjo@yahoo.com.br
  --------------------------------------------
  God makes us winners...
*/

/****************************************************************
 * A variável abaixo armazena uma lista de conexões
 * que podem existir no sistema. Caso seja necessária
 * uma nova conexão, apenas adicione mais um chave ao array
 * com as propriedades da nova conexão. 
 ****************************************************************/

$MySQLConnectionsAvailable = array
(
    "mvc" => array
    (
        "host"     => "localhost", 
        "user"     => "root", 
        "password" => "", 
        "database" => "mvc", 
        "port"     => 3306
    ),
    
    "site" => array
    (
        "host"     => "192.168.0.22", 
        "user"     => "site", 
        "password" => "", 
        "database" => "site", 
        "port"     => 3306
    )   
);


class MySQL
{
  
    private $connection = null;
    private $querySQL   = NULL;
    private $charset    = "latin1";
    private $host       = NULL;
    private $user       = NULL;
    private $password   = NULL;
    private $database   = NULL;
    private $port       = 3306;
   
    
    /**
     * Método construtor da classe
     * 
	 * @author Sandro Alves Peres
	 * @access public
	 * @return Void
	 */    
    public function __construct( $strConnection = null )
    {
        if( !isset($GLOBALS["MySQLConnectionsOpened"]) )
        {
            $GLOBALS["MySQLConnectionsOpened"] = array();
        }

        if( $strConnection != null )
        {
            $this->setConnection( $strConnection );
        }
    }  

  
    /**
     * Configura qual será a conexão que será aberta
     * A lista de conexões está em $MySQLConnectionsAvailable
     * 
	 * @author Sandro Alves Peres
	 * @access public
     * @param String $strName - Nome da Conexão
	 * @return Void
	 */    
    public function setConnection( $strName )
    {
        global $MySQLConnectionsAvailable;
        
        if( !array_key_exists($strName, $MySQLConnectionsAvailable) )
        {
            throw new OutOfBoundsException("Conexão não existe na configuração!");
        }
        
        $this->connection = $strName;
        $this->host       = $MySQLConnectionsAvailable[ $strName ]["host"];
        $this->user       = $MySQLConnectionsAvailable[ $strName ]["user"];
        $this->password   = $MySQLConnectionsAvailable[ $strName ]["password"];
        $this->database   = $MySQLConnectionsAvailable[ $strName ]["database"];
        $this->port       = $MySQLConnectionsAvailable[ $strName ]["port"];	 	 	   
    }
    
  
    /**
     * Abre a conexão com o banco de dados
     * 
	 * @author Sandro Alves Peres
	 * @access public
     * @param Boolean $bitUseOpenedConnection - Diz se será usada a mesma conexão caso já esteja aberta
	 * @return Void
	 */    
    public function open( $bitUseOpenedConnection = true )
    {
        global $MySQLConnectionsOpened;
        
        if( $bitUseOpenedConnection )
        {
            if( !isset($MySQLConnectionsOpened[ $this->connection ]) )
            {
                @$MySQLConnectionsOpened[ $this->connection ] = mysqli_connect($this->host, $this->user, $this->password, $this->database, $this->port);                
            }
        }
        else
        {
            @$MySQLConnectionsOpened[ $this->connection ] = mysqli_connect($this->host, $this->user, $this->password, $this->database, $this->port);            
        }

        if( $MySQLConnectionsOpened[ $this->connection ] )
        {
            $this->query("SET character_set_results = '" . $this->charset . "'");
            $this->query("SET character_set_client = '" . $this->charset . "'");
            $this->query("SET character_set_connection = '" . $this->charset . "'");
            $this->query("SET character_set_database = '" . $this->charset . "'");
            $this->query("SET character_set_server = '" . $this->charset . "'");	  
        }
        else
        {
            throw new Exception("Erro ao conectar com banco de dados!");
        }
    }
  
    
    /**
     * Muda a database na conexão aberta
     * 
	 * @author Sandro Alves Peres
	 * @access public
     * @param String $strDatabase - Nome da database
	 * @return Void
	 */    
    public function useDatabase( $strDatabase )
    {
        global $MySQLConnectionsOpened;        
        return mysqli_select_db( $MySQLConnectionsOpened[ $this->connection ], $strDatabase );  
    }
  
    
    /**
     * Fecha a conexão com o banco de dados
     * 
	 * @author Sandro Alves Peres
	 * @access public
	 * @return Void
	 */     
    public function close()
    {   
        global $MySQLConnectionsOpened;
        
        @mysqli_close( $MySQLConnectionsOpened[ $this->connection ] );
        unset( $MySQLConnectionsOpened[ $this->connection ] );
    }
  
    
    /**
     * Executa uma query no banco de dados
     * Para operações que não têm retorno
     * (INSERT, UPDATE, DELETE, etc)
     * 
	 * @author Sandro Alves Peres
	 * @access public
     * @param String $strQuery - Query SQL
	 * @return Void
	 */    
    public function query( $strQuery )
    {
        global $MySQLConnectionsOpened;
        
        @mysqli_free_result( $this->querySQL ); 
        $this->querySQL = mysqli_query( $MySQLConnectionsOpened[ $this->connection ], $strQuery );
        
        if( $this->getErrorNumber() > 0 )
        {
            throw new Exception( $this->getError(), $this->getErrorNumber() );
            return;
        }         
    }
  
    
    /**
     * Executa uma query no banco de dados
     * Com retorno de uma única linha de dados
     * 
	 * @author Sandro Alves Peres
	 * @access public
     * @param String $strQuery - Query SQL
	 * @return Array
	 */    
    public function queryFetchSingleRow( $strQuery )
    {
        global $MySQLConnectionsOpened;
        
        @mysqli_free_result( $this->querySQL ); 

        $this->querySQL = mysqli_query( $MySQLConnectionsOpened[ $this->connection ], $strQuery );

        if( $this->getErrorNumber() > 0 )
        {
            throw new Exception( $this->getError(), $this->getErrorNumber() );
            return;
        }        
        
        if( $this->querySQL )
        {
            return mysqli_fetch_array($this->querySQL, MYSQLI_ASSOC);
        }
        else
        {
            return false;
        }
    }  
    
    
    /**
     * Executa uma query no banco de dados
     * Com retorno de todos as linha da query
     * 
	 * @author Sandro Alves Peres
	 * @access public
     * @param String $strQuery - Query SQL
	 * @return Array
	 */     
    public function queryFetchAllRows( $strQuery )
    {
        global $MySQLConnectionsOpened;
        
        @mysqli_free_result( $this->querySQL ); 

        $this->querySQL = mysqli_query( $MySQLConnectionsOpened[ $this->connection ], $strQuery );
        
        if( $this->getErrorNumber() > 0 )
        {
            throw new Exception( $this->getError(), $this->getErrorNumber() );
            return;
        }

        if( $this->querySQL )
        {
            $list = array();

            while( $row = mysqli_fetch_array($this->querySQL, MYSQLI_ASSOC) )
            {
                $list[] = $row;
            }

            return $list;
        }
        else
        {
            return false;
        }
    }  

    
    /**
     * Retorna o número de linhas de uma query
     * previamente executada
     * 
	 * @author Sandro Alves Peres
	 * @access public
	 * @return Integer
	 */         
    public function lines()
    {
        return mysqli_num_rows( $this->querySQL );  
    }

    
    /**
     * Retorna o número de campos de uma query
     * previamente executada
     * 
	 * @author Sandro Alves Peres
	 * @access public
	 * @return Integer
	 */    
    public function fields()
    {
        return mysqli_num_fields( $this->querySQL );  
    } 
  
    
    /**
     * Retorna o número de linhas afetadas por uma
     * query previamente executada
     * 
	 * @author Sandro Alves Peres
	 * @access public
	 * @return Integer
	 */    
    public function affecteds()
    {
        global $MySQLConnectionsOpened;
        return mysqli_affected_rows( $MySQLConnectionsOpened[ $this->connection ] );
    }
  
    
    /**
     * Retorna a descrição do erro ocorrido em
     * um query previamente executada
     * 
	 * @author Sandro Alves Peres
	 * @access public
	 * @return String
	 */     
    public function getError()
    {
        global $MySQLConnectionsOpened;        
        return mysqli_error( $MySQLConnectionsOpened[ $this->connection ] );
    }
    
    
    /**
     * Retorna o número do erro ocorrido em
     * um query previamente executada
     * 
	 * @author Sandro Alves Peres
	 * @access public
	 * @return Integer
	 */       
    public function getErrorNumber()
    {
        global $MySQLConnectionsOpened;        
        return mysqli_errno( $MySQLConnectionsOpened[ $this->connection ] ); 
    }    
    
    
    /**
     * Retorna o AUTO_INCREMENT gerado
     * após uma inserção no banco de dados
     * 
	 * @author Sandro Alves Peres
	 * @access public
	 * @return Integer
	 */       
    public function getLastInsertId()
    {
        global $MySQLConnectionsOpened;        
        return mysqli_insert_id( $MySQLConnectionsOpened[ $this->connection ] );  
    }
  
    
    /**
     * Altera o autocommit da conexão
     * 
	 * @author Sandro Alves Peres
	 * @access public
     * @param Boolean $bitAutoCommit - Diz se é autocommit ou não
	 * @return Boolean
	 */     
    public function autoCommit( $bitAutoCommit )
    {
        global $MySQLConnectionsOpened;        
        return mysqli_autocommit( $MySQLConnectionsOpened[ $this->connection ], $bitAutoCommit );  
    }    
    
  
    /**
     * Inicia uma transação
     * 
	 * @author Sandro Alves Peres
	 * @access public
	 * @return Void
	 */     
    public function startTransaction()
    {
        $this->query("START TRANSACTION");
    }
  
    
    /**
     * Inicia uma transação
     * 
	 * @author Sandro Alves Peres
	 * @access public
	 * @return Void
	 */      
    public function begin()
    {
        $this->query("BEGIN");
    }

    
    /**
     * Inicia uma transação
     * 
	 * @author Sandro Alves Peres
	 * @access public
	 * @return Void
	 */     
    public function beginWork()
    {
        $this->query("BEGIN WORK");
    }
    
    
    /**
     * Cancela uma transação
     * 
	 * @author Sandro Alves Peres
	 * @access public
	 * @return Void
	 */     
    public function rollback()
    {
        $this->query("ROLLBACK");
    }

    
    /**
     * Confirma uma transação
     * 
	 * @author Sandro Alves Peres
	 * @access public
	 * @return Void
	 */     
    public function commit()
    {
        $this->query("COMMIT"); 
    }  
  
}
?>