Você está na página 1de 5

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

1create 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

construir e destruir a instancia da nossa classe.

construct

e

destruct.são

padrões do php e são responsáveis por

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 setadas pela nossa classe.

destruct

remove da memória todas as variáveis que foram

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 private static $host

private static $port

private static $user

private static $password = "123";

private static $db

= "mysql"; = "localhost"; = "3306"; = "root";

= "teste";

/*Metodos que trazem o conteudo da variavel desejada

@return

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;}

$xxx = conteudo da variavel solicitada*/

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 ao término da utilização da classe database.

destruct,

ou seja, ele sempre será executado

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 <?php

2 abstract class database{
3 /*Método construtor do banco de dados*/

private function
4

5 /*Evita que a classe seja clonada*/

6 private function

construct(){}

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 private static $host

private static $port

private static $user

private static $password = "123";

private static $db

= "mysql"; = "localhost"; = "3306"; = "root";

= "teste";

/*Metodos que trazem o conteudo da variavel desejada

@return

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;}

$xxx = conteudo da variavel solicitada*/

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;

}

?>

}