Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Adilson_Web_2007

[Resolvido] Classe de Conexão

Recommended Posts

Bom dia pessoal,

Sou principiante em PHP e peguei firme para estudar e aprender mesmo.

Comprei um livro, bom, que me indicarão aqui no forum.

 

Estou tentando desenvolver uma classe que conecta ao banco , para meu aprendizado. E gostaria da opnião de vocês.

Se essa classe está correta. Eu sei que é simples, e sei que da para fazer validação de erro também! Mas devagar eu chego lá.

Eu ainda não testei preciso criar um teste.

Mais agradeço a ajuda de vocês.

 

Segue o código:

   <?php

     /*
   * Aautor Adilson  D Cruz
   * Data de Criação 20/08/2009
   * Classe responsável por fazer conexão com o banco de dados.
   *
   */
   
   class DBMYSQL
   {

        // Declaração da constantes. Referente ao Banco de dados.
        const dominio = 'localhost';
        const usuario = 'root';
        const senha = 'admin';
        const db = 'teste';

        private $Conexao
        
        public SetConexao($valor)
        {
           $this->Conexao = $valor;
        }

        public getConexao()
        {
           return $this->Conexao;
        }
        
        // Construtor
        function __construct()
        {
             $this->SetConexao(mysql_connect(self::dominio,self::usuario,self::senha));
             mysql_select_db(self::db,$this->getConexao());
        }
        
        
        //Método responsável por fechar a conexão com o Banco de dados.
        
        function FechaConexao()
        {

           mysql_close($this->getConexao(););

        }
        
   }
   
   

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sou principiante em PHP e peguei firme para estudar e aprender mesmo.

 

Estou tentando desenvolver uma classe que conecta ao banco , para meu aprendizado. E gostaria da opnião de vocês.

Se essa classe está correta. Eu sei que é simples, e sei que da para fazer validação de erro também! Mas devagar eu chego lá.

 

Bom amigão, como você mesmo disse, é simples, mas acho que você está começando bem, até esse ponto está legal...

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

pode melhorar modificando esse trecho

 

        const dominio = 'localhost';
        const usuario = 'root';
        const senha = 'admin';
        const db = 'teste';

é recomendável fazer isso numa classe separada, num arquivo de configurações gerais, por exemplo, para evitar ter que mexer na classe sempre que precisar alterar esses dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

pode melhorar modificando esse trecho

 

           const dominio = 'localhost';        
           const usuario = 'root';        
           const senha = 'admin';        
           const db = 'teste';

é recomendável fazer isso numa classe separada, num arquivo de configurações gerais, por exemplo, para evitar ter que mexer na classe sempre que precisar alterar esses dados.

 

 

Esse pedaço de código você diz para colocar em outra classe?

Como assim arquivo de configurações gerais?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que o hinom falou é que é interessante ter um outro arquivo de configurações, tipo um ini.php, que você inclui em todas as páginas. Daí você grava como constante neste arquivo.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se essa classe está correta. Eu sei que é simples, e sei que da para fazer validação de erro também! Mas devagar eu chego lá.

Eae Adilson,

 

Então cara, o melhor jeito mesmo de ver se está correto é você ir testando... Depois o resto você vai pegando com o tempo, experiência =)

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

O que o hinom falou é que é interessante ter um outro arquivo de configurações, tipo um ini.php, que você inclui em todas as páginas. Daí você grava como constante neste arquivo.

 

Carlos Eduardo

 

 

 

Obrigado pela resposta.

 

Vou tentar fazer isso depois eu posto aqui. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif http://forum.imasters.com.br/public/style_emoticons/default/clap.gif http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela resposta.

 

Vou tentar fazer isso depois eu posto aqui.

 

Config.ini.php

<?php

class Configuracao
{
      const dominio = 'localhost';
      const usuario = 'root';
      const senha = 'admin';
      const db = 'teste';
}
?>

 

Classe de Conexão

 


<?php

/*
* Aautor Adilson  D Cruz
* Data de Criação 20/08/2009
* Classe responsável por fazer conexão com o banco de dados.
*
*/

class DBMYSQL
{

 # Inclusão da Classe de configuração dos dados
   include 'Config.ini.php';

// Declaração da constantes. Referente ao Banco de dados.

      private $Conexao

      public SetConexao($valor)
      {
        $this->Conexao = $valor;
      }

      public getConexao()
      {
         return $this->Conexao;
      }

      // Construtor

      function __construct()
      {
         $this->SetConexao(mysql_connect(Configuracao::dominio,Configuracao::usuario,Configuracao::senha));
         mysql_select_db(self::db,$this->getConexao());
      }

      //Método responsável por fechar a conexão com o Banco de dados.

      function FechaConexao()
      {
        mysql_close($this->getConexao(););
      }

}
?>
 

Será que é isso que tentaram me mostrar?

 

Agradeço a ajuda de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quase isto. Assim.

 

<?php
      define('DOMINIO','localhost');
      define('USUARIO', 'root');
      define('SENHA', 'admin');
      define('DB', 'teste');
?>

Você não dá um include deste arquivo dentro da classe, porque você vai incluir ele nas páginas que vão usar (me corrijam se eu falar besteira). E na sua classe fica assim.

 

<?php

/*
* Aautor Adilson  D Cruz
* Data de Criação 20/08/2009
* Classe responsável por fazer conexão com o banco de dados.
*
*/

class DBMYSQL
{

 # Inclusão da Classe de configuração dos dados
   include 'Config.ini.php';

// Declaração da constantes. Referente ao Banco de dados.

      private $Conexao

      public SetConexao($valor)
      {
        $this->Conexao = $valor;
      }

      public getConexao()
      {
         return $this->Conexao;
      }

      // Construtor

      function __construct()
      {
         $this->SetConexao(mysql_connect(DOMINIO,USUARIO,SENHA));
         mysql_select_db(DB,$this->getConexao());
      }

      //Método responsável por fechar a conexão com o Banco de dados.

      function FechaConexao()
      {
        mysql_close($this->getConexao(););
      }

}
?>

Mais ou menos isto

http://br.php.net/define

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não dá um include deste arquivo dentro da classe, porque você vai incluir ele nas páginas que vão usar (me corrijam se eu falar besteira). E na sua classe fica assim.

 

 

Não falou não. Incluse deu erro rrsrsrs. Já coloquei fora.

 

Segua as alterações.

 

 <?php

      define('DOMINIO','localhost');
      define('USUARIO', 'root');
      define('SENHA', 'admin');
      define('DB', 'teste');

?>

  <?php

/*
* Aautor Adilson  D Cruz
* Data de Criação 20/08/2009
* Classe responsável por fazer conexão com o banco de dados.
*
*/

    # Inclusão da Classe de configuração dos dados
    include 'Config.ini.php';
   
class DBMYSQL
{


// Declaração da constantes. Referente ao Banco de dados.

      private $Conexao;

      function SetConexao($valor)
      {
        $this->Conexao = $valor;
      }

      function getConexao()
      {
         return $this->Conexao;
      }

      // Construtor

      function _construct()
      {
         try
         {
             $this->SetConexao(mysql_connect(DOMINIO,USUARIO,SENHA));
             mysql_select_db(DB,$this->getConexao());
         }
         catch(Exception $ex)
         {
            echo "Erro: " . $ex->getMessage();
            die();
         }
         
         
      }

      //Método responsável por fechar a conexão com o Banco de dados.

      function FechaConexao()
      {
        mysql_close($this->getConexao());
      }

}
?>
Vou testar qualquer coisa eu posto ai obrigado. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que no fim das contas, usar constantes de classe ou como o Carlos disse o resultado será o mesmo (eu prefiro constantes de classe quando é o caso), a forma de se chamar essas constantes é que deve ser modificado.

 

Quando você fez:

 

class Qqrcoisa {
    include( "outroarquivo.php" );
    //...
}

É o mesmo que fazer:

 

class Qqrcoisa {
    class Outracoisa {
        const UMA_CONSTANTE = 1;
    }

    //...
}

E isso está errado.

 

Agora, independente de um método ou outro, para uma classe de conexão ou qualquer que seja a classe que você estiver trabalhando, procure sempre fazer com que as informações que possam ser modificadas, o sejam por meio de getters ou setters ou através de parâmetros no construtor.

 

Dê uma olhada na forma que a classe PDO trabalha, ela poderá ser uma boa fonte de inspiração para a criação de uma classe de conexão: http://br2.php.net/manual/pt_BR/book.pdo.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Dê uma olhada na forma que a classe PDO trabalha, ela poderá ser uma boa fonte de inspiração para a criação de uma classe de conexão: http://br2.php.net/m...BR/book.pdo.php

 

Você tem razão é bem melhor pelo o que eu le e pesquisei.

tentei fazer um exemplo e deu esse erro.

 

Fatal error: Class 'PDO' not found in C:\Apache2\htdocs\exemplos\pdo_insere.php on line 5

Fiz as configurações no php.ini, mas mesmo assim da esse erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Dê uma olhada na forma que a classe PDO trabalha, ela poderá ser uma boa fonte de inspiração para a criação de uma classe de conexão: http://br2.php.net/m...BR/book.pdo.php

 

Você tem razão é bem melhor pelo o que eu le e pesquisei.

tentei fazer um exemplo e deu esse erro.

 

Fatal error: Class 'PDO' not found in C:\Apache2\htdocs\exemplos\pdo_insere.php on line 5

Fiz as configurações no php.ini, mas mesmo assim da esse erro.

 

 

Consegui arrumar o erro que estava dando e mudei toda minha classe de conexao.

 

Conseguir fazer uma Fabrica de conexao.

 

O que vocês acham

 

Segue o código.

 

<?php
 
  class ConnectionFactory
 {
     static function getConnection()
	 {
	     try
		 {
		    return $conn = new PDO('mysql:host=localhost;port=3306;dbname=teste','root','admin');

		 }
		 catch(PDOException $ex)
		 {
		    print "Erro! : " . $ex->getMessage() . "\n";
            die();
		 }
	 }
 }

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Após o post animador do eibon, eu vou falar algo útil...

 

Nâo use mysql_select_db...

 

Essa função vai se tornar obsoleta com o PHP 6...

 

Use a extensão mysqli

 

http://br.php.net/mysqli

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tudo muito feio.Dá uma estudada...

 

 

 

Eu respeito sua opnião.

 

Estou estudndo e vendo varias formas de se fazer e de se aprender.

 

Crítica construtiva é valida. Se não vai ajudar não atrapalhe por favor.

 

Estou aqui porque quero ser um profissional e tenho certeza que tem muitos profissionais aqui.

 

Agradeço a ajuda de todos.

 

Após o post animador do eibon, eu vou falar algo útil...

 

Nâo use mysql_select_db...

 

Essa função vai se tornar obsoleta com o PHP 6...

 

Use a extensão mysqli

 

http://br.php.net/mysqli

 

Rick.hjpbarcelos agradeço a sua ajuda.

E realmente foi um balde de água fria, mas isso me deu mais motivo para continuar.

Me tirar uma dúvida você me falou para usar a extenxão msqli.

 

Do jeito que está agora a classe de conexão com o banco de dados está legal ou você me aconselhar a fazer outra.

 

Quero muito aprender.

 

Desculpe atrapalhar, não quero gerar nenhum desconforto para ninguém.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom pessoal depois de ler os post e pesquisar.

 

Estava lendo um livro e achei algo muito interessante.

 

Uma classe que faz conexão com varios banco e achei muito legal.

 

Testei a conexão co o mysql e está funcionado vou postar o código que sabe ajuda alguém.

 

Essas são as informações deste arquivo:my_livro.ini

host =localhost
name =phplivro
user =root
pass =admin
type =mysql

 

TConnection

<?php

      /*
      * classe TConnection
      * gerencia conexões com banco de dados através de arquivos de configuração
      */
      final class TConnection
      {
          /*
          * método __construct()
          * não existe instância de TConnection, por isto estamos marcando-o como private
          */
          private function __construct(){}
          
          
          /*
          * método open()
          * recebe o nome do banco de dados e instancia o objeto PDO correspondente
          */
          public static function open($name)
          {
             // verifica se existe arquivo de configurção para este banco de dados
             if(file_exists("app.config/{$name}.ini"))
             {
                // lê o INI e retorna um array
                $db = parse_ini_file(("app.config/{$name}.ini"));
             }
             else
             {
                // se não existir, lança um erro
                throw new Exception("Arquivo '$name' não encontrado ");
             }
             
             // lê as informações contidas no arquivo
             $user = isset($db['user']) ? $db['user'] : NULL;
             $pass = isset($db['pass']) ? $db['pass'] : NULL;
             $name = isset($db['name']) ? $db['name'] : NULL;
             $host = isset($db['host']) ? $db['host'] : NULL;
             $type = isset($db['type']) ? $db['type'] : NULL;
             $port = isset($db['port']) ? $db['port'] : NULL;
             
             // descobre qual o tipo (driver) de banco de dados a ser utilizado
             switch($type)
             {
                   case 'pgsql' :
                       $port = $port ? $port : '5432';
                       $conn = new PDO("pgsql:dbname={$name};user={$user};password={$pass};host = $host;port={$port}");
                       break;
                       
                   case 'mysql' :

                       $port = $port ? $port : '3306';
                       $conn = new PDO("mysql:host={$host};port={$port};dbname={$name}",$user,$pass);
                       break;

                   case 'sqlite':
                       $conn = new PDO("sqlite:{$name}");
                       break;
                       
                   case 'ibase' :
                       $conn = new PDO("firebird:dbname={$name}",$user,$pass);
                       break;
                       
                   case 'oci8' :
                       $conn = new PDO("oci:dbname={$name}",$user,$pass);
                       break;
                       
                   case 'mssql' :
                       $conn = new PDO("mssql:host={$host};1433;dbname={$name}",$user,$pass);
                       break;
               }

               // define para que o PDO lance exceções na ocorrência de erros
               $conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
               
               // retorna o objeto instanciado
               
               return $conn;

          }

      }

?>

Pessoal agradeço a ajuda de todos.

 

Desculpe atrapalhar. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.