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.181 ]
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
Script para gerar senhas aleatórias
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Problemas com Driver NVIDIA (5)
Warcraft II Remastered no Linux? (8)
Instalação dualboot Windows 11 e Debian 13 (7)









