-
-
Save felladrin/9611152 to your computer and use it in GitHub Desktop.
| <?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; | |
| } | |
| } |
$pdo = Database::conexao();
$stmt = $pdo->prepare('SELECT * FROM usuarios');
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.
Teria como você criar um projeto crud php usando formulario.
estou usando essa classe, quem quiser ver um exemplo básico de insert e select acessa lá
Obrigado por compartilhar
Coloquei também
self::$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
Vlw pela classe.
Fiz com:
class Database extends PDO {
...
self::$db = parent::__construct("$db_driver:host=$db_host; dbname=$db_nome", $db_usuario, $db_senha);
O nome do arquivo seria "Database.class.php" correto??
O nome do arquivo seria "
Database.class.php" correto??
Correto! Atualizei o nome do arquivo. Obrigado!
Muito legal. Parabens.
Muito bom, obrigado por compartilhar! Ajuda muito nos estudos hehe!
Como que usa isso? rsrsrs