Skip to content

Instantly share code, notes, and snippets.

@felladrin
Last active July 27, 2024 04:16
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 = "alguem@gmail.com";
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;
}
}
@mvnp
Copy link

mvnp commented Jan 10, 2016

Como que usa isso? rsrsrs

@brasilgb
Copy link

    $pdo = Database::conexao();
    $stmt = $pdo->prepare('SELECT * FROM usuarios');

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

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