Ir ao conteúdo
  • Cadastre-se
Charlie Fox

Classe de conexão com bd usando pdo

Recommended Posts

Bom dia a todos

 

Estou aprendendo PHP OO e falta de conteúdo não é o problema, na verdade tem muuuito conteúdo, mas ai que está o problema kkk :wacko:

Ja vi vários videos, tutoriais, forums, e a cada novo lugar que vou, surge um novo modo de fazer, isso é o que me deixa mais decepcionado, pois quando penso que estou fazendo da maneira correta, alguem vem e diz que está tudo errado e explica a maneira "correta". 

Na busca em fazer um código limpo, de fácil entendimento e que utiliza as técnicas mais atuais, vou me deparando com vários termos e todos se dizem ser o jeito certo. Alguns falam que preciso usar PDO, ou que mysqli_* ja é suficiente, devo fazer a classe usando singleton, a classe de conexão não fica no mesmo arquivo das informações de configuração (hostname, user,password, db),etc.

Enfim, conclui que definitivamente não existe o jeito certo quando vou desenvolver em PHP OO.

 

Mas de qualquer maneira, gostaria de saber se minha classe de conexão está aceitável rs.
 

<?php

class Conexao{

	public $pdo;
        
	public function Connect(){
        try{
          $db_user = "root"; //usuário
          $db_pw   = ""; //senha

          $this->pdo = new PDO ("mysql:host=localhost;dbname=curso;charset=utf8",
          $db_user,
          $db_pw,
          array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
        }catch(PDOException $e){
            echo "Erro ao conectar com o banco de dados " . $e->getMessage();
        }
    }
}

 

Se puderem me falar o que posso melhorar nesse caso, agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Charlie Fox

A classe está ótima, porém eu recomendo que você crie variaveis para colocar as informações do banco.

essa é a que eu uso:

esta bem parecida com a sua :)

class Database
{   
    private $host = "localhost";
    private $db_name = "ocomon";
    private $username = "root";
    private $password = "";
    public $conn;
     
    public function dbConnection()
	{
     
	    $this->conn = null;    
        try
		{
            $this->conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db_name, $this->username, $this->password);
			$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);	
        }
		catch(PDOException $exception)
		{
            echo "Connection error: " . $exception->getMessage();
        }
         
        return $this->conn;
    }
}

 

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu uso uma classe um pouco diferente destas duas... mas não vou postar porque é muito mais avançado.. e explicar ela seria difícil com o tempo escaço rsrsrs

Mas  esta aí já é muito boa!

Só recomendo ali trocar o mysql  por  mysqli

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Ygor Anjos  Obrigado pela resposta, realmente está bem parecido, o fato de colocar as configurações em variáveis é por questão de segurança ou pra deixar mais fácil a manutenção?

E é necessário a função retornar a variável?

 

@dif Obrigado por contribuir também, você diz pra colocar mysqli antes de ":host" ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Charlie Fox Na verdade quando se usa a orientação a objetos você não precisa atribuir os valores das variáveis quando se cria a classe, em determinados casos. Nesse aí não precisa!

Só que aí é interessante adicionar os parâmetros na função desta maneira:

Por exemplo:

class Database
{   
    private $host;
    private $db_name;
    private $username;
    private $password;
    public $conn;
     
    public function dbConnection($host, $db_name, $username, $password)
	{
     
	    $this->conn = null;    
        try
		{
            $this->conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db_name, $this->username, $this->password);
			$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);	
        }
		catch(PDOException $exception)
		{
            echo "Connection error: " . $exception->getMessage();
        }
         
        return $this->conn;
    }
}

Eaí quando for chamar a função  da classe você põe os valores 

require_once("banco.class.php");

dbConnection("localhost","ocomon","root","");

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@dif Passando as configurações por parâmetro tem impacto na segurança? 

Preciso colocar essas informações(host, db, user, senha) toda vez que fazer conexão com o banco?

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Charlie Fox

2 horas atrás, Charlie Fox disse:

Passando as configurações por parâmetro tem impacto na segurança? 

Não. pelo contrário, usando parâmetros na suas funções torna seu sistema mais limpo. E não. Não tem impacto na segurança, até porque ninguém terá acesso aos arquivos php. Não esqueça de colocar alguma proteção de SQL injection ou pelo menos algo que dificulte o SQL Injection.

 

2 horas atrás, Charlie Fox disse:

Preciso colocar essas informações(host, db, user, senha) toda vez que fazer conexão com o banco?

Sim, toda vez que for fazer algo no banco você abre a conexão.. mas sempre para o que você está fazendo.

No caso, por exemplo se você tem 2 banco de dados e precisa fazer consulta nos dois.... a função é a melhor escolha para abri conexao.

 

ficando no exemplo:

dbConnection("localhost","banco1","usuario","senha");
dbConnection("localhost","banco2","usuario","senha");

e por ai vai...

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×