Académique Documents
Professionnel Documents
Culture Documents
Instalao (Windows)
A instalao simples, basta voc ter na mquina o PHP5 instalado e verificar se as extensions esto na pasta. Editar o arquivo php.ini e descomentar as seguintes linhas: (tire o ; da linha) PDO dll: extension=php_pdo.dll Ddl do banco que vai utilizar: extension=php_pdo_firebird.dll extension=php_pdo_mssql.dll extension=php_pdo_mysql.dll extension=php_pdo_oci.dll extension=php_pdo_oci8.dll extension=php_pdo_odbc.dll extension=php_pdo_pgsql.dll extension=php_pdo_sqlite.dll
Restart o Apache e pronto. Se voc no conseguir existe uma maneira mais simples usando o WAMP5. Baixe o WAMP5 (http://www.wampserver.com/en/download.php) execute o arquivo baixado, instale em c:\wamp. A instalao muito simples sem nenhum segredo. No final voc estar com o PHP, o Mysql e o Apache rodando redondinho em sua mquina. Para habilitar o PDO, basta voc clicar no cone do wamp que se encontra no system try ( barra do Windows perto do relgio) ir em PHP extensions clicar na extenso php_pdo e depois na extenso do banco de dados que voc vai utilizar. No meu caso escolhi php_pdo_mysql. Restart o Apache e pronto. Obs: todos os seus arquivos tero que estar em c:\wamp\www. Para saber se os drivers esto funcionando, abra o bloco de notas (Iniciar > Executar: notepad ) digite isso: PHP 1. 2. 3. 4. 5. <?php foreach(PDO::getAvailableDrivers() as $driver){ echo $driver.'<br />'; } ?>
www.revistaphp.com.br
Salve o arquivo como drivers.php na pasta do wamp: c:\wamp\www Execute no navegador: http://localhost/drivers.php ser exibido uma lista com os drivers instalado. Conectando uma base de dados Para conectarmos a base de dados selecionada, bem simples basta instanciar um objeto de nosso PDO. Exemplo:
PHP 1. $pdo = new PDO("tipo_do_banco:host=o_host;dbname=nome_da_base, usurio, senha ); 2. www.revistaphp.com.br mysql em minha mquina: PHP 1. $pdo = new PDO(mysql:host=localhost;dbname=teste, root, xxxxx); www.revistaphp.com.br Obs: maiores informaes de como conectar outros banco de dados: http://www.php.net/manual/pt_BR/ref.pdo.php#pdo.drivers
// lembra do mysql_fetch_array? while ($rs = $stmt->fetch(PDO::FETCH_OBJ)) { // aqui eu mostro os valores de minha tabela // veja que no objeto $rs estou usando o nome real do campo da tabela 19. echo "Nome: ".$rs->nome." - Email: ".$res>email."<BR>"; 20. } 21. // fecho o banco 22. $pdo = null; 23. // tratamento da exeo 24. }catch(PDOException $e){ echo $e->getMessage(); } 25. 26. ?> www.revistaphp.com.br Output: Nome: Joo Maria Email: joaomaria@gmail.com Nome: Chico Jos Email: chicojose@hotmail.com Nome: Maria Delfina Email: mariadelfina@yahoo.com Pronto com isso temos uma manipulao de banco de dados genrica simples e segura. Espero ter ajudado, na prxima edio estarei mostrando uma classe fbrica de conexes utilizando o PDO e uma classe DAO (Data Access Object) que far acesso a essa classe e voc ter um script 100% OO no PHP. At a prxima =)
1. class PDOConnectionFactory{ 2. // recebe a conexo 3. public $con = null; 4. // qual o banco de dados? 5. public $dbType = "mysql"; 6. 7. // parmetros de conexo 8. // quando no for necessrio deixe em branco apenas com as aspas duplas "" 9. public $host = "localhost"; 10. public $user = "root"; 11. public $senha = ""; 12. public $db = "teste"; 13. 14. // seta a persistncia da conexo 15. public $persistent = false; 16. 17. // new PDOConnectionFactory( true ) <--- conexo persistente 18. // new PDOConnectionFactory() <--- conexao no persistente 19. public function PDOConnectionFactory( $persistent=false ){ 20. // verifico a persistncia da conexao 21. if( $persistent != false){ $this->persistent = true; } 22. } 23. 24. public function getConnection(){ 25. try{ 26. // realiza a conexo 27. $this->con = new PDO($this>dbType.":host=".$this->host.";dbname=".$this->db, $this->user, $this->senha, 28. array( PDO::ATTR_PERSISTENT => $this->persistent ) ); 29. // realizado com sucesso, retorna conectado 30. return $this->con; 31. // caso ocorra um erro, retorna o erro; 32. }catch ( PDOException $ex ){ echo "Erro: ".$ex->getMessage(); } 33. 34. } 35. 36. // desconecta 37. public function Close(){ 38. if( $this->con != null ) 39. $this->con = null; 40. } 41. 42. } www.revistaphp.com.br
Com todas as extenses do PHP necessrias para o PDO funcionar instaladas, vamos testar essa nossa classe. Crie um novo arquivo TesteConnect.php e faa o seguinte.
PHP
1. <?php 2. @require("PDOConnectionFactory.class.php"); 3. 4. try { 5. $pdo = new PDOConnectionFactory(); 6. $pdo->getConnection(); 7. // estou conectado 8. echo "Sucesso"; 9. 10. $pdo = null; 11. }catch (PDOException $ex){ echo $ex->getMessage(); } 12. 13. ?> www.revistaphp.com.br
Prxima publicao ser do padro de projetos Data Access Object. Espero que estejam gostando.
www.revistaphp.com.br
Vamos ver no artigo e voc vai perceber que no tem nenhum mistrio. Utilizei apenas uma tabela, agenda, com os campos id, nome, email e telefone. Segue o SQL da tabela:
SQL 1. CREATE TABLE `agenda` ( 2. `id` int(4) NOT NULL AUTO_INCREMENT, 3. `nome` varchar(50) DEFAULT NULL, 4. `email` varchar(50) DEFAULT NULL, 5. `telefone` varchar(10) DEFAULT NULL, 6. PRIMARY KEY (`id`) 7. ); www.revistaphp.com.br
35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. }
} public function getNome(){ return $this->nome; } public function getEmail(){ return $this->email; } public function getTelefone(){ return $this->telefone; }
www.revistaphp.com.br
26. >getTelefone() ); 27. 28. 29. 30. 31. 32. 33. 34.
// fecho a conexo $this->conex = null; // caso ocorra um erro, retorna o erro; }catch ( PDOException $ex ){ echo "Erro: ".$ex->getMessage(); } 35. } 36. 37. // realiza um Update 38. public function Update( $agenda, $condicao ){ 39. try{ 40. // preparo a query de update - Prepare Statement 41. $stmt = $this->conex->prepare("UPDATE agenda SET nome=?, email=?, telefone=? WHERE id=?"); 42. $this->conex->beginTransaction(); 43. // valores encapsulados nas variveis da classe Agenda. 44. // sequencia de ndices que representa cada valor de minha query 45. $stmt->bindValue(1, $agenda->getNome() ); 46. $stmt->bindValue(2, $agenda->getEmail() ); 47. $stmt->bindValue(3, $agenda>getTelefone() ); 48. $stmt->bindValue(4, $condicao); 49. 50. // executo a query preparada 51. $stmt->execute(); 52. 53. $this->conex->commit(); 54. 55. // fecho a conexo 56. $this->conex = null; 57. // caso ocorra um erro, retorna o erro; 58. }catch ( PDOException $ex ){ echo "Erro: ".$ex->getMessage(); } 59. } 60. 61. // remove um registro 62. public function Deleta( $id ){ 63. try{ 64. // executo a query 65. $num = $this->conex->exec("DELETE FROM agenda WHERE id=$id"); 66. // caso seja execuado ele retorna o nmero de rows que foram afetadas. 67. if( $num >= 1 ){ return $num; } else { return 0; } 68. // caso ocorra um erro, retorna o erro; 69. }catch ( PDOException $ex ){ echo "Erro: ".$ex->getMessage(); } 70. } 71. 72. public function Lista($query=null){
try{
if( $query == null ){ // executo a query $stmt = $this->conex>query("SELECT * FROM agenda"); 77. }else{ 78. $stmt = $this->conex>query($query); 79. } 80. // desconecta 81. $this->conex = null; 82. // retorna o resultado da query 83. return $stmt; 84. }catch ( PDOException $ex ){ echo "Erro: ".$ex->getMessage(); } 85. } 86. } www.revistaphp.com.br
A classe DAO ir fazer as operaes bsicas em uma tabela. Inserir, Atualiza, Deletar e Listar. Note que as querys de gravao e atualizao, esto com os valores dos campos com uma ? e depois passado pelo ndice o valor de cada ? encapsulado no objeto da classe Agenda. Isso ajuda na segurana para interferir no SQL Injection. Vamos testar
PHP 1. // incluo as classes que preciso. 2. // voc pode criar um arquivo requires.php e por essas linhas, depois s dar um incude("requires.php"); 3. @require("PDOConnectionFactory.class.php"); 4. @require("AgendaDAO.class.php"); 5. @require("Agenda.class.php"); www.revistaphp.com.br
Para inserir:
PHP 1. // instancio a classe Agenda 2. $agenda = new Agenda(); 3. 4. #### INSERE ##### 5. 6. $agenda->setNome("Aderbal Nunes"); 7. $agenda->setEmail("aderbalnunes@gmail.com"); 8. $agenda->setTelefone("5555 5555"); 9. 10. // instancio a classe Data Access Object para Agenda 11. $DAO = new AgendaDAO(); 12. $DAO->Insere($agenda); 13. 14. #################
www.revistaphp.com.br
Atualizar um registro:
PHP 1. #### UPDATE ##### 2. $agenda->setNome("Aderbal Nunes Machado"); 3. $agenda->setEmail("aderbalnunes@gmail.com"); 4. $agenda->setTelefone("4444 4444"); 5. 6. // instancio a classe Data Access Object para Agenda 7. $DAO = new AgendaDAO(); 8. // objeto agenda, o ID do registro 9. $DAO->Update($agenda, 1); 10. 11. ################# www.revistaphp.com.br
Deletar um registro:
PHP 1. 2. 3. 4. 5. 6. 7. 8. #### DELETE ##### // instancio a classe Data Access Object para Agenda $DAO = new AgendaDAO(); // ID do registro a ser afetado echo $DAO->Deleta(1)." registro(s) deletado(s)"; #################
www.revistaphp.com.br
Listar os registros:
PHP 1. 2. 3. 4. 5. 6. 7. 8. 9. #### LISTA ##### // instancio a classe Data Access Object para Agenda $DAO = new AgendaDAO(); foreach ($DAO->Lista() as $row){ echo $row["nome"]." - ".$row["email"]."<br>"; } #################
www.revistaphp.com.br
Obs: Existe a opo de listagem da maneira que voc precisa. Por exemplo para eu listar os registros apenas de um ndice, basta passar a query completa como parmetro no mtodo Lista(). Por exemplo:
PHP 1. $res = $DAO->Lista(SELECT nome FROM agenda a, malling m WHERE a.id = m.id); 2. foreach ($res as $row){ 3. echo $row["a.nome"]."<br>"; 4. } www.revistaphp.com.br
Pronto com isso finalizo o artigo. Espero que tenham gostado e qualquer dvida mande um e-mail. Estudando esse mtodo voc estar se adaptando a maneira mais utilizada em mtodos de programao atual. Usada atualmente em Java e mostrei pra vocs que com o PHP tambm capaz de utilizar. Obrigado e at a prxima. Referncias: http://www.caucho.com/resin-3.1/examples/quercus-pdo/index.xtp http://www.php.net http://pt.wikipedia.org/