Ir ao conteúdo
  • Cadastre-se

Classe de conexão com bd usando pdo


Posts recomendados

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.

Link para o comentário
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
Link para o comentário
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" ?

Link para o comentário
Compartilhar em outros sites

  • Moderador

@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
Link para o comentário
Compartilhar em outros sites

  • Moderador

@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...

 

 

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...