Skip to content

Instantly share code, notes, and snippets.

@felladrin
Last active October 12, 2024 10:58
Show Gist options
  • Save felladrin/9611152 to your computer and use it in GitHub Desktop.
Save felladrin/9611152 to your computer and use it in GitHub Desktop.
Classe de conexão ao banco de dados usando PDO no padrão Singleton.
<?php
/**
* Classe de conexão ao banco de dados usando PDO no padrão Singleton.
*
* Exemplo de uso:
* ```
* require_once './Database.class.php';
* $db = Database::conexao(); // Pega a instância da conexao com o banco de dados.
* $insercao = $db->prepare("INSERT INTO pessoa (nome, idade) VALUES (:nome, :idade)"); // Prepara a instrução de inserção de uma pessoa no banco de dados.
* $insercao->bindParam(':nome', $nome); // Faz a ligação entre o parâmetro ":name" da instrução preparada acima com a variável $nome (supondo que $nome contém uma sequência de caracteres fornecida pelo usuário).
* $insercao->bindParam(':idade', $idade); // Faz a ligação entre o parâmetro ":idade" com a variável $idade (supondo que $idade contém um número fornecido pelo usuário).
* $insercao->execute(); // Executa a instrução no banco de dados (com os parâmetros já substituídos por seus respectivos valores).
* ```
*
* Para mais informações, confira o Manual do PDO: https://www.php.net/manual/en/intro.pdo.php
*/
class Database
{
# Variável que guarda a conexão PDO.
protected static $db;
# Private construct - garante que a classe só possa ser instanciada internamente.
private function __construct()
{
# Informações sobre o banco de dados:
$db_host = "localhost";
$db_nome = "banco";
$db_usuario = "usuario";
$db_senha = "senha";
$db_driver = "mysql";
# Informações sobre o sistema:
$sistema_titulo = "Nome do Sistema";
$sistema_email = "[email protected]";
try
{
# Atribui o objeto PDO à variável $db.
self::$db = new PDO("$db_driver:host=$db_host; dbname=$db_nome", $db_usuario, $db_senha);
# Garante que o PDO lance exceções durante erros.
self::$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
# Garante que os dados sejam armazenados com codificação UFT-8.
self::$db->exec('SET NAMES utf8');
}
catch (PDOException $e)
{
# Envia um e-mail para o e-mail oficial do sistema, em caso de erro de conexão.
mail($sistema_email, "PDOException em $sistema_titulo", $e->getMessage());
# Então não carrega nada mais da página.
die("Connection Error: " . $e->getMessage());
}
}
# Método estático - acessível sem instanciação.
public static function conexao()
{
# Garante uma única instância. Se não existe uma conexão, criamos uma nova.
if (!self::$db)
{
new Database();
}
# Retorna a conexão.
return self::$db;
}
}
@mrnono
Copy link

mrnono commented Jun 26, 2016

Felladrin boa noite!

Como construiria esta classe em abstract e qual diferença ela faria em minhas operações.....
Estou perguntando pois estou estudando e professor me pediu para cria-se as classe de conexão em abstração.

@lucaseduardomds
Copy link

Teria como você criar um projeto crud php usando formulario.

@rafaelvulner
Copy link

estou usando essa classe, quem quiser ver um exemplo básico de insert e select acessa lá

@srRodolfo
Copy link

Obrigado por compartilhar

@leuuuuu
Copy link

leuuuuu commented May 1, 2018

Coloquei também
self::$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
Vlw pela classe.

@brendonpawn
Copy link

brendonpawn commented May 25, 2019

Fiz com:

class Database extends PDO {

...

self::$db = parent::__construct("$db_driver:host=$db_host; dbname=$db_nome", $db_usuario, $db_senha);

@EduVillas
Copy link

O nome do arquivo seria "Database.class.php" correto??

@felladrin
Copy link
Author

O nome do arquivo seria "Database.class.php" correto??

Correto! Atualizei o nome do arquivo. Obrigado!

@JailsonSantos
Copy link

Muito legal. Parabens.

@LucasFnavarro
Copy link

Muito bom, obrigado por compartilhar! Ajuda muito nos estudos hehe!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment