Sei sulla pagina 1di 11

CRUD PDO

Locadora
1ºPasso – Banco de Dados
Create database locadora;
create table carro(
id int not null auto_increment,
modelo varchar(255) not null,
marca varchar(255) not null,
data_cadastro timestamp not null,
preco double not null,
primary key (id)
);
2ºPasso – index.php(somente html)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Locadora</title>
</head>
<body>
<form action="carrosalvar.php" method="POST" name="form1" >
<h1>Locadora de Carro</h1>
<hr>
<input type="hidden" name="id" />
Modelo:
<input type="text" name="modelo" required/>
Marca:
<input type="text" name="marca" required/>
Preço:
<input type="number" name="preco" required/>
<input type="submit" value="salvar" />
<input type="reset" value="Novo" />
<hr>
</form>
<table border="1" width="100%">
<tr>
<th>Modelo</th>
<th>Marca</th>
<th>Data Cadastro</th>
<th>Preço</th>
<th>Ações</th>
</tr>
</table>
</body>
</html>
3ºPasso – conexao.php
<?php
try {
$con = new PDO("mysql:host=localhost; dbname=locadora", "root", "");
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//O método setAttribute() nos permite adicionar atributos no objeto de
conexão
$con->exec("set names utf8");
} catch (PDOException $erro) {
echo "Erro na conexão:" . $erro->getMessage();
}
?>
4ºPasso – carrosalvar.php
<?php
// Verificar se foi enviando dados via POST
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
//$id = (isset($_POST["id"]) && $_POST["id"] != null) ? $_POST["id"] : "";
$modelo = (isset($_POST["modelo"]) && $_POST["modelo"] != null) ? $_POST["modelo"] : "";
$marca = (isset($_POST["marca"]) && $_POST["marca"] != null) ? $_POST["marca"] : "";
$preco = (isset($_POST["preco"]) && $_POST["preco"] != null) ? $_POST["preco"] : NULL;
include 'conexao.php';
try {
$stmt = $con->prepare("INSERT INTO carro (modelo, marca, preco) VALUES (?, ?, ?)");
$stmt->bindParam(1, $modelo);
$stmt->bindParam(2, $marca);
$stmt->bindParam(3, $preco);
if ($stmt->execute()) {
if ($stmt->rowCount() > 0) {
//echo "Dados cadastrados com sucesso!"; //echo '<meta http-equiv="refresh" content="0, url=index.php">';
header("location: index.php");
} else {
echo "Erro ao tentar efetivar cadastro";
}
} else {
throw new PDOException("Erro: Não foi possível executar a declaração sql");
}
} catch (PDOException $erro) {
echo "Erro: " . $erro->getMessage();
}
}
?>
5ºPasso – Carregar a tabela com os carros
<!--Adicionar o código abaixo no index.php-->
<?php
// Bloco que realiza o papel do Read - recupera os dados e apresenta na tela
include 'conexao.php';
try {
$stmt = $con->prepare("SELECT * FROM carro");
if ($stmt->execute()) {
while ($rs = $stmt->fetch(PDO::FETCH_OBJ)) {
echo "<tr>";
echo "<td>".$rs->modelo."</td>
<td>".$rs->marca."</td>
<td>".$rs->data_cadastro."</td>
<td>".$rs->preco."</td>
<td><center><a href=\"carroalterar.php?id=".$rs->id."\">[Alterar]</a>"."&nbsp;&nbsp;"."<a href=\"carroexcluir.php?id=".$rs->id."\">[Excluir]</a></center></td>";
echo "</tr>";
}
}else {
echo "Erro: Não foi possível recuperar os dados do banco de dados";
}
} catch (PDOException $erro) {
echo "Erro: ".$erro->getMessage();
}
?>
6ºPasso – contatoexcluir.php
<?php
// Verificar se foi enviando dados via POST
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
$id = (isset($_GET["id"]) && $_GET["id"] != null) ? $_GET["id"] : "";
include 'conexao.php';
try {
$stmt = $con->prepare("DELETE FROM carro WHERE id = ?");
$stmt->bindParam(1, $id);
if ($stmt->execute()) {
//echo "Registro excluído com sucesso!";
header("location: index.php");
} else {
throw new PDOException("Erro: Não foi possível executar a declaração sql");
}
} catch (PDOException $erro) {
echo "Erro: ".$erro->getMessage();
}
}
?>
7ºPasso – contatoalterar.php (parte1)
7ºPasso – contatoalterar.php (parte2)
7ºPasso – contatoalterar.php
(parte3)
Prepared Statements and Bound
Parameters
• Uma instrução preparada é um recurso usado para executar as mesmas instruções SQL (ou similares) repetidamente com
alta eficiência.

• As instruções preparadas basicamente funcionam assim:


• Preparar: Um modelo de instrução SQL é criado e enviado ao banco de dados. Certos valores não são especificados,
chamados parâmetros (rotulados "?"). Exemplo: INSERIR EM VALORES DO MyGuests (?,?,?)
• O banco de dados analisa, compila e executa otimização de consulta no modelo de instrução SQL e armazena o
resultado sem executá-lo
• Executar: posteriormente, o aplicativo vincula os valores aos parâmetros e o banco de dados executa a instrução. O
aplicativo pode executar a instrução quantas vezes quiser com valores diferentes

• Comparado à execução direta de instruções SQL, as instruções preparadas têm três vantagens principais:
• Instruções preparadas reduzem o tempo de análise, pois a preparação da consulta é feita apenas uma vez (embora a
instrução seja executada várias vezes)
• Parâmetros limitados minimizam a largura de banda para o servidor, pois você precisa enviar apenas os parâmetros
a cada vez, e não toda a consulta
• Instruções preparadas são muito úteis contra injeções de SQL, porque os valores dos parâmetros, que são
transmitidos posteriormente usando um protocolo diferente, não precisam ser escapados corretamente. Se o
modelo de instrução original não for derivado de entrada externa, a injeção SQL não poderá ocorrer.