Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
2
PHP Data Object
3
Conexão
A conexão com o banco de dados é feita no construtor da classe
PDO, e as informações de conexão são passadas na forma de
uma DSN (ou data source name), além das credenciais de acesso.
O construtor da classe PDO espera 3 parâmetros
<?php
// MySQL
$db = new PDO(“mysql:host=daileon;dbname=jaspion”, “root”, “123456”);
// PostgreSQL
$db = new PDO(“pgsql:host=daileon;dbname=jaspion”, “root”, “123456”);
unset($db)
4
Executar comandos
Após conectar com o banco de dados, teremos um objeto da
classe PDO. Agora, podemos usar métodos deste objeto para
manipular comando no SGBD.
5
Realizar consultas
O método exec() pode executar qualquer comando SQL em nosso
banco.
Porém, quando precisamos fazer consultas e manipular valores de
retorno do banco, precisamos usar outro método.
Este método se chama query(), e retorna um objeto da classe
PDOStatement contendo os resultados da consulta feita.
Estes objetos podem ser iterados, já que são uma coleção de
dados retornados pela nossa consulta.
<?php
$db = new PDO(“mysql:host=daileon;dbname=jaspion”, “root”, “123456”);
$dados = $db->query(“SELECT * FROM posts”);
6
Realizar consultas
Para acessar os dados contidos no objeto PDOStatement,
fazemos uso dos métodos fetch() e fetchAll(), sendo que:
● fetch() retorna apenas um resultado da consulta;
● fetchAll() retorna todos os resultados.
Estes métodos podem retornar arrays ou objetos, dependendo dos
parâmetros passados.
<?php
$db = new PDO(“mysql:host=daileon;dbname=jaspion”, “root”, “123456”);
$dados = $db->query(“SELECT * FROM posts”);
$todos = $dados->fetchAll();
$um = $dados->fetch();
print_r($todos);
print_r($um);
7
Realizar consultas
Por padrão, fetch() e fetchAl() retornam tanto índices associativos
(nomes das colunas) quanto índices numéricos (posição da coluna
de acordo com a sua ordem na tabela).
Podemos escolher se vamos recuperar apenas índices
associativos, ou se apenas índices numéricos.
<?php
$db = new PDO(“mysql:host=daileon;dbname=jaspion”, “root”, “123456”);
print_r($associativo);
print_r($numerico);
8
Realizar consultas
<?php
$db = new PDO(“mysql:host=daileon;dbname=jaspion”, “root”, “123456”);
9
Transactions
10
Transactions
Podemos definir transações em nossas aplicações com PDO
através do comando beginTransaction:
<?php
$db = new PDO("mysql:host=localhost;dbname=banco", "root", "123456");
$db->beginTransaction();
$db->exec(“UPDATE pedidos SET compra = 5641”);
$db->exec(“UPDATE cliente SET compra = 5641”);
$db->exec(“INSERT INTO logistica (compra) VALUES (5641)”);
11
Transactions
<?php
// Caso tenha dado tudo certo
$db->commit();
// Caso alguma coisa tenha dado errado, podemos desfazer
$db->rollback();
12
Prepared Statements
13
Prepared Statements
14
Prepared Statements
<?php
$db = new PDO(“mysql:host=localhost;dbname=banco”, “root”, “123456”);
$st = $db->prepare(“INSERT INTO posts (titulo, conteudo) VALUES (?, ?)”);
15
Stored Procedures
Antes de conhecermos como usar Stored Procedures utilizando
PDO, vamos descobrir como utilizá-la direto no MySQL.
Veja como criar uma procedure “teste”:
# mysql -u root -p
mysql> delimiter //
mysql> create procedure teste (out parametro INT)
mysql> begin
mysql> select id from posts where id=1;
mysql> end //
16
Stored Procedures
<?php
$db = new PDO("mysql:host=localhost;dbname=banco", "root", "123456");
$statement = $db->prepare("CALL teste(@1)");
$um = $statement->execute();
echo $um;
17
Controle de Erros
Por padrão, o PDO oferece três modos de controle de erros:
● PDO::ERRMODE_SILENT: para obter erros através dos
métodos errorCode e errorInfo (junto com comandos SQL)
● PDO::ERRMODE_WARNING, lança warnings toda vez que
problemas são encontrados.
● PDO::ERRMODE_EXCEPTION, lança exceções toda vez que
problemas são encontrados.
<?php
$db = new PDO("mysql:host=localhost;dbname=banco", "root", "123");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
18
Controle de Erros
<?php
try {
$db = new PDO("mysql:host=lochsot;dbname=banco", "root", "123456");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo "Falha na conexão: " . $e->getMessage();
}
19
Relembrando MVC
Agora que já conhecemos PDO como uma robusta opção de
acesso a banco de dados, vamos relembrar um pouco da
estrutura MVC, que estamos aos poucos usando para modelar
nosso projeto de e-commerce de livros:
index.php
app
Controller.php
Model.php
View.php
lib
Livro.php
Usuario.php
view
blog.php
post.php
20
index.php
Caso existam classes, elas poderão ficar separadas:
<?php
function appLoad($classe) {
require_once("app/$classe.php");
}
function libLoad($classe) {
require_once("lib/$classe.php");
}
spl_autoload_register(“appLoad”);
spl_autoload_register(“libLoad”);
new Controller();
21
Controller.php
<?php
class Controller {
public $template;
public $model;
22
Controller.php
23
Model
<?php
class Model {
public function getContent() {
return array(
'conteudo' => 'duadsuadsioiuads'
);
}
public function getPost($id) {
return array(
'titulo' => "Post $id",
'conteudo' => 'duazxczczcxuads'
);
}
}
24
View
blog.php
<!DOCTYPE html>
<html>
<head>
<title>Meu Blog</title>
</head>
<body>
<h1>Bem vindo ao blog!</h1>
<?php echo $data['conteudo']; ?>
</body>
</html>
posts.php
<!DOCTYPE html>
<html>
<head>
<title>Meu Blog</title>
</head>
<body>
<h1> <?php echo $data['titulo']; ?></h1>
<?php echo $data['conteudo']; ?>
</body>
</html>
25