<?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");
}
}
?>
|