Skip to content

Instantly share code, notes, and snippets.

@walney
Forked from felladrin/Database.class.php
Created September 10, 2016 00:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save walney/2987d64a2522e39230375218b06ebf4e to your computer and use it in GitHub Desktop.
Save walney/2987d64a2522e39230375218b06ebf4e 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.
* Modo de Usar:
* require_once './Database.class.php';
* $db = Database::conexao();
* E agora use as funções do PDO (prepare, query, exec) em cima da variável $db.
*/
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;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment