Cadastro utilizando a classe PDO com o método prepare()
Publicado por Estefanio Nunes dos Santos (última atualização em 27/06/2012)
[ Hits: 12.276 ]
Homepage: http://estefanio.com.br
Segue um exemplo de uso da classe PDO com o método prepare().
O mesmo foi utilizado em um um sisteminha de funcionários para cadastrar, editar, listar e excluir registros, para evitar SQL Injection.
<?php
/*
CREATE TABLE `tb_funcionario` (
`id` int(10) NOT NULL AUTO_INCREMENT PRIMARY KEY UNIQUE,
`nome` varchar(250) NOT NULL,
`profissao` varchar(250) NOT NULL
)DEFAULT CHARSET=utf8
*/
// dados da conexao:
$database = 'minha_base_de_dados';
$db_user = 'usuario';
$db_password = 'senha';
// instancia a classe
$conn = new PDO('mysql:host=localhost;dbname=' . $database, $db_user, $db_password);
// pagina resgatada da URL
$page = (isset($_GET['page'])) ? $_GET['page'] : NULL;
// id restagado da URL
$id = (isset($_GET['id'])) ? (int) $_GET['id'] : 0;
// inicia a mensagem vazia
$mensagem = '';
// verifica se o formulario foi acionado
if (isset($_POST['submit'])) {
// prepara os dados do formulario
$post_nome = (isset($_POST['nome'])) ? $_POST['nome'] : 'NULL';
$post_profissao = (isset($_POST['profissao'])) ? $_POST['profissao'] : 'NULL';
$post_id = (isset($_POST['id'])) ? (int) $_POST['id'] : 0;
// verifica se foi o formulario de insert
if ($_POST['submit'] == 'add') {
// prepara o SQL
$sql = $conn->prepare('INSERT INTO tb_funcionarios (nome, profissao)VALUES(:nome, :profissao)');
// Prepara os dados do formulario
$data = array(
':nome' => $post_nome,
':profissao' => $post_profissao,
);
try {
// executa o SQL
$sql->execute($data);
// Mensagem de alerta
$mensagem = alert('Registro Adicionado');
} catch (PDOException $e) {
// mostra o erro
$e->getMessage();
}
}
// verifica se foi o formulario de update
if ($_POST['submit'] == 'edit') {
// prepara o SQL
$sql = $conn->prepare('UPDATE tb_funcionarios SET nome= :nome, profissao = :profissao WHERE id= :id');
// Prepara os dados do formulario
$data = array(
':nome' => $post_nome,
':profissao' => $post_profissao,
':id' => $post_id,
);
try {
// executa
$sql->execute($data);
// mensagem
$mensagem = alert('Registro Editado');
} catch (PDOException $e) {
// mostra o erro
$e->getMessage();
}
}
}
// prepara o SQL
$sql = $conn->prepare('SELECT * FROM tb_funcionarios ORDER BY id DESC');
try {
// executa o SQL
$sql->execute();
// Cria uma variavel de listagem
$listar = $sql->fetchAll(PDO::FETCH_OBJ);
} catch (PDOException $e) {
// mostra o erro
$e->getMessage();
}
// verifica se o id foi acionadao para o update
if ($id > 0) {
// prepara o SQL
$sql = $conn->prepare('SELECT * FROM tb_funcionarios WHERE id= :id');
// Prepara os dados
$data = array(':id' => $id);
try {
// executa o SQL
$sql->execute($data);
// Prepara o fecth
$row = $sql->fetch(PDO::FETCH_OBJ);
} catch (PDOException $e) {
// mostra o erro
$e->getMessage();
}
}
/*
* prepara os dados para ser mostrado
* no php 5.3 as variaveis devem ser declaradas
*/
$value_id = (isset($row->id)) ? $row->id : FALSE;
$value_nome = (isset($row->nome)) ? $row->nome : '';
$value_profissao = (isset($row->profissao)) ? $row->profissao : '';
// delete
if (($page == 'delete') && $id > 0) {
// executa o SQL para excluir
$sql = $conn->prepare('DELETE FROM tb_funcionarios WHERE id= :id');
// prepara os dados
$data = array(':id' => $id);
try {
// executa o SQL
$sql->execute($data);
// Mostra a mensagem de erro
$mensagem = alert('Registro deletado.');
} catch (PDOException $e) {
// mostra a mensagem
$e->getMessage();
}
}
////////////////////////////////////////////////////////
/** javascript alert() */
function alert($texto, $redirect = TRUE) {
$redirect = ($redirect) ? 'location.href="crud_pdo.php";' : '';
return '
<script type="text/javascript">
alert("' . $texto . '");
' . $redirect . '
</script>
';
}
/* * ***************************************
*
* conteudo da pagina
*
* **************************************** */
echo '<a href="crud_pdo.php">lista</a> |' . "\n";
echo '<a href="crud_pdo.php?page=add">Add</a> | ' . "\n";
echo '<hr />' . "\n";
echo $mensagem;
/* * ***************************************
*
* Listar registros
*
* **************************************** */
if ($page == NULL) {
echo "<h1>listar</h1>\n";
if (count($listar) > 0):
foreach ($listar as $row):
echo "<p>\n";
echo 'Nome: ', $row->nome, "<br />\n";
echo 'Profissao: ', $row->profissao, "<br />\n";
echo '<a href="crud_pdo.php?page=edit&id=' . $row->id . '">Edit</a> | ' . "\n";
echo '<a href="crud_pdo.php?page=delete&id=' . $row->id . '"">Delete[x]</a>' . "\n";
echo "</p>\n";
endforeach;
else:
echo 'Adicione um registro <a href="crud_pdo.php?page=add">Aqui</a>';
endif;
/* * ***************************************
*
* Adicionar registro
*
* **************************************** */
}elseif ($page == 'add') {
echo "<h1>Add</h1>\n";
echo '<form method="post">' . "\n";
echo 'Nome:<br />' . "\n";
echo '<input type="text" name="nome" style="whidth: 350px" /><br />' . "\n";
echo 'Profissao:<br />' . "\n";
echo '<input type="text" name="profissao" style="whidth: 350px" /><br />' . "\n";
echo '<input type="submit" name="submit" value="add" />' . "\n";
echo '</form>' . "\n";
/* * ***************************************
*
* Editar registro
*
* **************************************** */
} elseif ($page == 'edit') {
echo "<h1>Edit</h1>\n";
if ($value_id) {
echo '<form method="post">' . "\n";
echo '<input type="hidden" name="id" value="' . $value_id . '" /><br />' . "\n";
echo 'Nome:<br />' . "\n";
echo '<input type="text" name="nome" value="' . $value_nome . '" style="whidth: 350px" /><br />' . "\n";
echo 'Profissao:<br />' . "\n";
echo '<input type="text" name="profissao" value="' . $value_profissao . '" style="whidth: 350px" /><br />' . "\n";
echo '<input type="submit" name="submit" value="edit" />' . "\n";
echo '</form>' . "\n";
} else {
echo 'Registro nao existe';
}
}
?>
Sistema de área restrista PHP/MYSQL
KWEB.SYS - Simples script de login em PHP sem uso de bancos de dados (MySQL)
Gravando log de erros gerados em consultas SQL
KDE Plasma - porque pode ser a melhor opção de interface gráfica
Gentoo: detectando impressoras de rede e como fixar uma impressora por IP
Como o GNOME conseguiu o feito de ser preterido por outras interfaces gráficas
Por que sua empresa precisa de uma PKI (e como automatizar EMISSÕES de certificados via Web API)
Instalando NoMachine no Gentoo com Systemd (acesso Remoto em LAN)
Gentoo: Trocando wpa_supplicant pelo iwd no NetworkManager (Systemd)
Instalar Linux em notebook Sony Vaio VPCEG13EB (10)
Vou destruir sua infância:) (6)
Quando vocês pararam de testar distros? (24)









