Baixe o app para aproveitar ainda mais
Prévia do material em texto
PDO em PHP Orientado a Objetos Veja nesse artigo como usar o PDO em PHP orientado a objetos para conectar em um banco de dados. Nesse artigo vou mostrar como usar o PDO para conectar em um banco de dados em PHP orientado a objetos. Nesse exemplo estou usando o banco de dados MySQL. Vamos primeiramente criar um banco de dados chamado “teste”. Ver Listagem 1 Listagem 1: Código para criar um banco de dados no MySQL query 1 create database teste Agora vamos criar a estrutura da classe de conexão. Para isso vamos criar um arquivo chamado conexao.php e criar a nossa classe database que será uma abstrata. Ver Listagem 2. Listagem 2: Estrutura da classe database 1 2 3 4 <?php abstract class database{ } ?> Vamos então adicionar os métodos padrões para as classes abstratas que são o __construct, __clone e __destruct. Ver Listagem 3. Os métodos __construct e __destruct.são padrões do php e são responsáveis por construir e destruir a instancia da nossa classe. O método __clone evita que nossa classe seja clonada. Listagem 3: Classe usuarios com os métodos __construct, __clone e __destruct 1 2 3 4 5 6 7 8 <?php abstract class database{ /*Método construtor do banco de dados*/ private function __construct(){} /*Evita que a classe seja clonada*/ private function __clone(){} /*Método que destroi a conexão com banco de dados e remove da 9 10 11 12 13 14 15 16 memória todas as variáveis setadas*/ public function __destruct() { foreach ($this as $key => $value) { unset($this->$key); } } } ?> Na listagem 3 o método __destruct remove da memória todas as variáveis que foram setadas pela nossa classe. Agora vamos criar os métodos de conexão e fechar a conexão com o BD. Ver Listagem 4. Listagem 4: Métodos connect e disconnect 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 <?php abstract class database{ /*Método construtor do banco de dados*/ private function __construct(){} /*Evita que a classe seja clonada*/ private function __clone(){} /*Método que destroi a conexão com banco de dados e remove da memória todas as variáveis setadas*/ public function __destruct() { $this->disconnect(); foreach ($this as $key => $value) { unset($this->$key); } } private static $dbtype = "mysql"; private static $host = "localhost"; private static $port = "3306"; private static $user = "root"; private static $password = "123"; private static $db = "teste"; /*Metodos que trazem o conteudo da variavel desejada @return $xxx = conteudo da variavel solicitada*/ private function getDBType() {return self::$dbtype;} private function getHost() {return self::$host;} private function getPort() {return self::$port;} private function getUser() {return self::$user;} private function getPassword(){return self::$password;} private function getDB() {return self::$db;} private function connect(){ try { $this->conexao = new PDO($this- >getDBType().":host=".$this->getHost().";port=".$this- >getPort().";dbname=".$this->getDB(), $this->getUser(), $this- 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 >getPassword()); } catch (PDOException $i) { //se houver exceção, exibe die("Erro: <code>" . $i->getMessage() . "</code>"); } return ($this->conexao); } private function disconnect(){ $this->conexao = null; } } ?> Veja a definição das variáveis privadas usadas para conexão na Listagem 4: dbtype - define uma string que informa qual a plataforma de banco de dados que estamos usando. Para o MySQL usamos a string “mysql” e para o SQL Server usamos a string “mssql”. Veja nesse link http://br.php.net/manual/en/pdo.drivers.php os drives de banco de dados suportados pelo PDO host - define o nome do host port - define a porta do host user - define o usuário de acesso ao banco de dados password - define a senha de acesso ao banco de dados db - define o nome do banco de dados O método connect tenta se conectar com o banco de dados usando as informações passadas pelas variáveis privadas, caso não consiga retorna um erro. O método disconnect finaliza a conexão com o banco de dados. Perceba que esse método está sendo chamado pelo método __destruct, ou seja, ele sempre será executado ao término da utilização da classe database. Por fim vamos criar os métodos insert, select, update e delete para fazer o nosso CRUD. Ver Listagem 5. Listagem 5: Métodos insert, select, update e delete 1 2 3 4 5 6 <?php abstract class database{ /*Método construtor do banco de dados*/ private function __construct(){} /*Evita que a classe seja clonada*/ private function __clone(){} 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 /*Método que destroi a conexão com banco de dados e remove da memória todas as variáveis setadas*/ public function __destruct() { $this->disconnect(); foreach ($this as $key => $value) { unset($this->$key); } } private static $dbtype = "mysql"; private static $host = "localhost"; private static $port = "3306"; private static $user = "root"; private static $password = "123"; private static $db = "teste"; /*Metodos que trazem o conteudo da variavel desejada @return $xxx = conteudo da variavel solicitada*/ private function getDBType() {return self::$dbtype;} private function getHost() {return self::$host;} private function getPort() {return self::$port;} private function getUser() {return self::$user;} private function getPassword(){return self::$password;} private function getDB() {return self::$db;} private function connect(){ try { $this->conexao = new PDO($this- >getDBType().":host=".$this->getHost().";port=".$this- >getPort().";dbname=".$this->getDB(), $this->getUser(), $this- >getPassword()); } catch (PDOException $i) { //se houver exceção, exibe die("Erro: <code>" . $i->getMessage() . "</code>"); } return ($this->conexao); } private function disconnect(){ $this->conexao = null; } /*Método select que retorna um VO ou um array de objetos*/ public function selectDB($sql,$params=null,$class=null){ $query=$this->connect()->prepare($sql); $query->execute($params); if(isset($class)){ $rs = $query->fetchAll(PDO::FETCH_CLASS,$class) or die(print_r($query->errorInfo(), true)); }else{ $rs = $query->fetchAll(PDO::FETCH_OBJ) or die(print_r($query->errorInfo(),true)); } 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 self::__destruct(); return $rs; } /*Método insert que insere valores no banco de dados e retorna o último id inserido*/ public function insertDB($sql,$params=null){ $conexao=$this->connect(); $query=$conexao->prepare($sql); $query->execute($params); $rs = $conexao->lastInsertId() or die(print_r($query- >errorInfo(), true)); self::__destruct(); return $rs; } /*Método update que altera valores do banco de dados e retorna o número de linhas afetadas*/ public function updateDB($sql,$params=null){ $query=$this->connect()->prepare($sql); $query->execute($params); $rs = $query->rowCount() or die(print_r($query->errorInfo(), true)); self::__destruct(); return $rs; } /*Método delete que excluí valores do banco de dados retorna o número de linhas afetadas*/ public function deleteDB($sql,$params=null){ $query=$this->connect()->prepare($sql); $query->execute($params); $rs = $query->rowCount() or die(print_r($query->errorInfo(), true)); self::__destruct(); return $rs; } } ?>
Compartilhar