Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Salveeeeeeee pessoal. Estou enfretando um problema que não estou sabendo resolver. Estou implementando o cógido da intranet aqui da empresa que trabalho, logo estou usando classes para abstrair os dados do banco.
No meu caso tenho várias classes: Projeto, Usuário, Permissão, Upload, Tarefas, etc... Sendo que, todas essas classes acessam o meu banco de dados e TODAS elas usam a classe ADODB, para abstração. Vou mostrar um exemplo prático aqui...(não reparem se o código tem desenpenho ou não.. só olhem o método para obter os registros
<?php
//incluo o a ADODB
include "../../adodb5/adodb.inc.php";
//Crio uma classe de exemplo
class ExemploX
{
public $Id;
public $Name;
public $Email;
public function getById($Id)
{
$DB = NewADOConnection('mysql');
$DB->Connect("servidor", "root", "senha", "nomedobanco"); // ESSA VARIÁVEL ASSUME O VALOR DA CONEXÃO
$Sql = "SELECT * FROM exemplo WHERE id=".$Id;
$Rs = $DB->Execute($Sql);
if($Rs) //Retorna os valores para as propriedades
{
$this->Id = $Rs->fields['id'];
$this->Name = $Rs->fields['name'];
$this->Email = $Rs->fields['email'];
}
}
}
//Outra classe
class ExemploY
{
public $Id;
public $Name;
public $Email;
public function getById($Id)
{
$DB = NewADOConnection('mysql');
$DB->Connect("servidor", "root", "senha", "nomedobanco"); // ESSA VARIÁVEL ASSUME O VALOR DA CONEXÃO
$Sql = "SELECT * FROM exemplo_y WHERE id=".$Id;
$Rs = $DB->Execute($Sql);
if($Rs) //Retorna os valores para as propriedades
{
$this->Id = $Rs->fields['id'];
$this->Name = $Rs->fields['name'];
$this->Email = $Rs->fields['email'];
}
}
}
?>Se tenho 5 classes usando ADODB, vou precisar conectar ao banco 5 vezes dentro da classe, pois para o usar o médoto DB::Execute() eu preciso antes ajustar para esse objeto a conexão usada.
Uma alternativa que encontrei para revolver isso, foi o uso de uma variável global para conexão com o banco...segue o código:
<?php
//incluo o a ADODB
include "../../adodb5/adodb.inc.php";
global $DB;
$DB = NewADOConnection('mysql');//Crio uma classe de exemplo
class ExemploX
{
public $Id;
//...
public function getById($Id)
{
$Sql = "SELECT * FROM exemplo WHERE id=".$Id;
$Rs = $GLOBALS['DB']->Execute($Sql); //Uso a conexão GLOBAL para obter usar o método Execute()
if($Rs) //Retorna os valores para as propriedades
{
$this->Id = $Rs->fields['id'];
//...
}
}
public function Delete($Id)
{
$Sql = "DELETT FROM exemplo WHERE id=".$Id;
$Rs = $GLOBALS['DB']->Execute($Sql); //Uso a conexão GLOBAL para obter usar o método Execute()
//...
}
}
?>Bom.. não sei se vocês me entenderam direito, mas tentando resumir ,é o seguinte: Como usar o método Execute, diretamente, sem o uso de variáveis globais?Carregando comentários...