Baixe o app para aproveitar ainda mais
Prévia do material em texto
28/10/2016 CRUD com PHP PDO http://www.devmedia.com.br/crudcomphppdo/28873 1/10 favorito (16) marcar como lido tirar dúvidas CRUD com PHP PDO Veja nesse artigo como a realizar as operações de CRUD usando a API PDO do PHP. Confira esse e os melhores artigos de PHP no maior portal para programadores. Confira. (12) (0) Olá pessoal, em um artigo anterior falamos um pouco sobre a nova API PDO. Vimos como fazer para se conectar à um banco de dados MySQL e como retornar valores de um banco de dados. Nesse artigo iremos continuar falando sobre esse assunto, só que dessa vez iremos ver como fazemos para realizar um CRUD. Uma observação interessante é que o PDO fornece uma camada de abstração com o banco de dados, isso ocorre porque o PDO faz conexão com diversos bancos de dados diferentes, como MySQL, PLSQL, da mesma forma, tendo a única coisa diferente a string de conexão. Mas afinal Ricardo, o que é um CRUD? O CRUD vem do inglês, das palavras (Create, Read, Update, Delete) que quer dizer basicamente as 4 (quatro) principais operações com um banco de dados(inserir, ler, atualizar, excluir). Quando pensamos em qualquer website dinâmico ou sistemas em gerais, a primeira coisa que vem na nossa cabeça é o CRUD, sem ele nada funciona, pois é com ele que realizamos as interações com o banco de dados. Como a parte do Read (ler) nós já vimos no artigo anterior junto com a conexão (ver link no início do artigo), nesse artigo iremos tratar apenas o Insert, update e delete. Vamos começar com o Insert usando o PDO. Insert Antes de vermos como fazer com o PDO, iremos ver como inserir dados no banco de dados com a api mysql, a qual não é mais recomendado seu uso. Listagem 1: Inserindo dados na tabela com API mysql Buscar <?php $nome = $_POST["nome"]; $email = $_POST["email"]; $tel = $_POST["tel"]; http://www.devmedia.com.br/favorite/addfavorite.asp?comp=28873 http://www.devmedia.com.br/favorite/add_finished.asp?comp=28873 28/10/2016 CRUD com PHP PDO http://www.devmedia.com.br/crudcomphppdo/28873 2/10 Como podemos ver é muito simples, mas foi considerado deprecated, ou seja, foi descontinuado pela galera do PHP, vamos ver como podemos fazer o insert usando PHP PDO. Listagem 2: Insert usando PHP PDO Podemos ver que não muda muita coisa no código, apenas a forma como é gerado, usando try..catch e as funções de comunicação também, mas de resto continua bem parecida. Nota: Essa maneira é a considerada ideal pela maioria dos desenvolvedores PHP hoje em dia, mas também existe a mysqli, que funciona bem parecido com a mysql, com a diferença de um “i” no final. Update Para atualizar um registro na tabela do banco de dados utilizamos o comando UPDATE em SQL, só que essa parte é um pouco mais complexa, pois na verdade você vai precisar listar os registros, para ai sim escolher o que quer editar e atualizar. No nosso exemplo não irei me atentar na forma de receber esses dados para ai sim atualizar em si, vamos dar ênfase apenas em como fazer o nosso código de atualizar. Para fazer a atualização usando a API mysql é só fazer assim: Listagem 3: Update com mysql_ Agora utilizando o PDO basta utilizar esse código: Listagem 4: Update usando PDO $tel = $_POST["tel"]; include_once 'conexao.php'; $sql = "insert into cliente values(null, '".$nome."','".$email."','".$tel."')"; //echo $sql; if(mysql_query($sql,$con)){ $msg = "Gravado com sucesso!"; }else{ $msg = "Erro ao gravar!"; } mysql_close($con); ?> <?php try { $pdo = new PDO('mysql:host=localhost;dbname=meuBancoDeDados', $username, $password); $pdo‐>setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $pdo‐>prepare('INSERT INTO minhaTabela VALUES(:nome)'); $stmt‐>execute(array( ':nome' => 'Ricardo Arrigoni' )); echo $stmt‐>rowCount(); } catch(PDOException $e) { echo 'Error: ' . $e‐>getMessage(); ?> <?php $nome = $_POST["nome"]; $email = $_POST["email"]; $tel = $_POST["tel"]; $id = $_POST["id"]; include_once 'conexao.php'; $sql = "update cliente set nome = '".$nome."', email = '".$email."',telefone = '".$tel."' where idcliente = ".$id; if(mysql_query($sql,$con)){ $msg = "Atualizado com sucesso!"; }else{ $msg = "Erro ao atualizar!"; } mysql_close($con); ?> <?php 28/10/2016 CRUD com PHP PDO http://www.devmedia.com.br/crudcomphppdo/28873 3/10 Lembrando que estamos usando exemplos distintos em cada API, o que queremos é mostrar como funciona as funções do PDO, fique livre para adaptar ao seu projeto da maneira que achar melhor. Delete A função de delete é praticamente igual ao insert na prática, a diferença é que ao invés de inserir dados, vamos estar excluindo eles da tabela, para isso precisamos identificar o registro de alguma maneira(normalmente usamos o próprio ID do registro) para então excluir da tabela. Excluindo dados usando o mysql_ é da forma que mostramos na listagem 5: Listagem 5: Excluindo dados usando mysql_ Para realizar a exclusão com o PDO ficaria dessa forma na listagem 6: Listagem 6: Excluindo com PDO Como podemos ver estamos utilizando o bindParam e caso utilize ele sempre deve ser passado uma variável no segundo parâmetro, caso contrario terá uma mensagem de erro. SELECT Abaixo é possível ver um código simples de exemplo de como executar um select no banco de dados usando PDO. Listagem 7: Select em PDO <?php $id = 5; $nome = "Novo nome do Ricardo"; try { $pdo = new PDO('mysql:host=localhost;dbname=meuBancoDeDados', $username, $password); $pdo‐>setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $pdo‐>prepare('UPDATE minhaTabela SET nome = :nome WHERE id = :id'); $stmt‐>execute(array( ':id' => $id, ':nome' => $nome )); echo $stmt‐>rowCount(); } catch(PDOException $e) { echo 'Error: ' . $e‐>getMessage(); } ?> <?php $id = $_GET["id"]; include_once 'conexao.php'; $sql = "delete from cliente where idcliente = ".$id; if(mysql_query($sql,$con)){ $msg = "Deletado com sucesso!"; }else{ $msg = "Erro ao deletar!"; } mysql_close($con); ?> <?php $id = 5; try { $pdo = new PDO('mysql:host=localhost;dbname=meuBancoDeDados', $username, $password); $pdo‐>setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $pdo‐>prepare('DELETE FROM minhaTabela WHERE id = :id'); $stmt‐>bindParam(':id', $id); $stmt‐>execute(); echo $stmt‐>rowCount(); } catch(PDOException $e) { echo 'Error: ' . $e‐>getMessage(); } ?> <?php $consulta = $pdo‐>query("SELECT nome, usuario FROM login;"); DEVMEDIA http://www.devmedia.com.br/ 28/10/2016 CRUD com PHP PDO http://www.devmedia.com.br/crudcomphppdo/28873 4/10 Conclusão Neste artigo não abordei as conexões e nem a listagem de dados, focamos apenas em aprender como inserir, atualizar e excluir registros no banco de dados MySQL utilizando o PDO do PHP. Se tiverem alguma dúvida, podem ficar a vontade em usar os comentários abaixo para perguntar que terei prazer em respondêlas. Espero que tenham gostado e até o próximo artigo. Veja também Introdução ao PHP PDO Usando PDO (PHP Data Objects) para aumentar a produtividade Biblioteca PDO PHP Curso de PHP Curso de Laravel Publicado no Canal PHP e no Canal Mais por Ricardo Arrigoni Especialista PHP e frontend Ajudenos a evoluir: você gostou do post? (12) (0) Compartilhe: $consulta = $pdo‐>query("SELECT nome, usuario FROM login;"); while ($linha = $consulta‐>fetch(PDO::FETCH_ASSOC)) { echo "Nome: {$linha['nome']} ‐ Usuário: {$linha['usuario']}<br />"; } ?> Post aqui sua dúvida ou comentário que nossa equipe responderá o mais rápido possível. Ficou com alguma dúvida? Frederico Brigatte*** Como fazer um select usando pdo? há +1 ano Douglas ClaudioOlá Frederico, obrigado pelo seu comentário. Enviamos sua solicitação ao Ricardo e estamos no aguardo de um feedback do mesmo. Um abraço. há +1 ano Frederico Brigatte*** Guia Persistência de dados com PHP + DEVMEDIA http://www.devmedia.com.br/introducao-ao-php-pdo/24973 http://www.devmedia.com.br/usando-pdo-php-data-objects-para-aumentar-a-produtividade/28446 http://www.devmedia.com.br/biblioteca-pdo-php/24015 http://www.devmedia.com.br/cursos/php http://www.devmedia.com.br/curso/curso-de-introducao-ao-laravel/451 http://www.devmedia.com.br/php/ http://www.devmedia.com.br/canal-mais/ http://www.devmedia.com.br/space/ricardo-arrigoni http://www.devmedia.com.br/ 28/10/2016 CRUD com PHP PDO http://www.devmedia.com.br/crudcomphppdo/28873 5/10 Ok, fico no aguardo. há +1 ano [autor] Ricardo Arrigoni Olá Frederico, tudo bom ? Você pode usar algo desse tipo: http://pastebin.com/PAw2EaDH Você pode também dar uma olhada nesse artigo aqui que vai te ajudar muito. http://www.devmedia.com.br/usandopdophpdataobjectspara aumentaraprodutividade/28446 há +1 ano Frederico Brigatte*** Teria um exemplo completo de crud para estudo? há +1 ano Douglas Claudio Olá Frederico, obrigado pelo seu comentário. Enviamos sua solicitação ao Ricardo e estamos no aguardo de um feedback do mesmo. Um abraço. há +1 ano [autor] Ricardo Arrigoni Olá Frederico, não entendi sua pergunta, o artigo em questão já não é exatamente o que está perguntando ? abs há +1 ano Frederico Brigatte*** Até que ajuda, mas queria um mais dinâmico, algo assim: Uma função para selecionar qualquer tabela com um número indefinido de campos passando por parâmetro na clausula WHERE se precisar. Entendeu? há +1 ano Douglas Claudio Olá Frederico, obrigado pelo seu comentário. Enviamos sua solicitação ao Ricardo e estamos no aguardo de um feedback do mesmo. Um abraço. há +1 ano [autor] Ricardo Arrigoni Opa Frederico, para isso basta você mudar o nome da tabela e especificar os campos que deseja retornar em sua cláusula. Você vai precisar pegar a base do artigo e tentar aplicálo as suas necessidades, assim irá conseguir aprender e resolver os trabalhos. há +1 ano Frederico Brigatte*** Eu queria uma ajuda, o update eu até tenho pronto. Gostaria de uma ajuda para montar os outros métodos. $sql = "UPDATE $tabela SET "; $filmes = new ArrayIterator($dados) while($filmes>valid()): $sql. = $filmes>key(). " = ? ,"; $filmes>next; endwhile; $sql2 = rtrim($sql, ','); $sql2.= " WHERE id = ?"; $atualizar = $pdo > prepare($sql2); Guia Persistência de dados com PHP + DEVMEDIA http://www.devmedia.com.br/usando-pdo-php-data-objects-para-aumentar-a-produtividade/28446 http://www.devmedia.com.br/ 28/10/2016 CRUD com PHP PDO http://www.devmedia.com.br/crudcomphppdo/28873 6/10 $i = 1; foreach($dados as $valor) $atualizar>bindValue($i, $valor); $i++; endforeach; há +1 ano Douglas Claudio Olá Frederico, obrigado pelo seu comentário. Enviamos sua solicitação ao Ricardo e estamos no aguardo de um feedback do mesmo. Um abraço. há +1 ano [autor] Ricardo Arrigoni Frederico, o método de INSERT, UPDATE e DELETE estão no artigo, e o exemplo de SELECT foi passado naquele exemplo que te mandei anteriormente. há +1 ano Frederico Brigatte*** Gostaria de deixar como postei, tem como me ajudar? há +1 ano Douglas Claudio Olá Frederico, obrigado pelo seu comentário. Enviamos sua solicitação ao Ricardo e estamos no aguardo de um feedback do mesmo. Um abraço. há +1 ano [autor] Ricardo Arrigoni Olá Frederico, não posso simplesmente criar o código para você copiar e colocar no seu sistema. Você precisa pegar as dicas e conhecimentos adquiridos na leitura do artigo e tentar criar seu próprio código. Posso te auxiliar em possíveis erros que venham a acontecer, lhe ajudando a identificálos. Faz parte do processo de aprendizagem. há +1 ano Frederico Brigatte*** Não estou sabendo fazer o do insert, entendeu? Pode me ajudar? há +1 ano Douglas Claudio Olá Frederico, obrigado pelo seu comentário. Enviamos sua solicitação ao Ricardo e estamos no aguardo de um feedback do mesmo. Um abraço. há +1 ano [autor] Ricardo Arrigoni Pode colocar o seu código no pastebin.com e falar o erro que aparece pra eu dar uma olhada? Você precisa começar de algum lugar, com o código aqui do artigo vc consegue, pelo menos, começar o seu código: http://pastebin.com/AtKiTwDY há +1 ano Frederico Brigatte*** Não erro, eu queria fazer o INSERT como foi feito o UPDATE. há +1 ano Frederico Brigatte*** Guia Persistência de dados com PHP + DEVMEDIA http://www.devmedia.com.br/ 28/10/2016 CRUD com PHP PDO http://www.devmedia.com.br/crudcomphppdo/28873 7/10 Como converto esse código para PDO: public function executaSQL($sql=NULL){ if($sql!=NULL): $query = mysql_query($sql) or $this>trataerro(__FILE__,__FUNCTION__); $this>linhasafetadas = mysql_affected_rows($this>conexao); if(substr(trim(strtolower($sql)),0,6)=='select'): $this>dataset = $query; return $query; else: return $this>linhasafetadas; endif; else: $this>trataerro(__FILE__,__FUNCTION__,NULL,'Comando SQL nao informado na rotina', FALSE); endif; }//fim executaSQL public function retornaDados($tipo=NULL){ switch(strtolower($tipo)): case "array": return mysql_fetch_array($this>dataset); break; case "assoc": return mysql_fetch_assoc($this>dataset); break; case "object": return mysql_fetch_object($this>dataset); break; default: return mysql_fetch_object($this>dataset); break; endswitch; }//fim retornaDados há +1 ano Douglas Claudio Olá Frederico, obrigado pelo seu comentário. Enviamos sua solicitação ao Ricardo e estamos no aguardo de um feedback do mesmo. Um abraço. há +1 ano [autor] Ricardo Arrigoni Frederico, vc não tá usando o exemplo do artigo de maneira certa, no seu código não tem nem o comando SQL pra fazer o insert no banco. INSERT <?php try { $pdo = new PDO('mysql:host=localhost;dbname=meuBancoDeDados', $username, $password); $pdo >setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $pdo>prepare('INSERT INTO minhaTabela VALUES(:nome)'); $stmt>execute(array( ':nome' => 'Ricardo Arrigoni' )); echo $stmt>rowCount(); } catch(PDOException $e) { echo 'Error: ' . $e>getMessage(); ? > SELECT <?php $id = 5; $nome = "Novo nome do Ricardo"; try { $pdo = new PDO('mysql:host=localhost;dbname=meuBancoDeDados', $username, $password); $pdo>setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $pdo>prepare('UPDATE minhaTabela SET nome = :nome WHERE id = :id'); $stmt>execute(array( ':id' => $id, ':nome' => $nome )); echo $stmt>rowCount(); } catch(PDOException $e) { echo 'Error: ' . $e>getMessage(); } ?> há +1 ano Frederico Brigatte*** Ok, segue um update, como que seria um insert utilizando esse modelo? // UPDATE GENÉRICO function atualizar($tabela, $id, $dados) { // UPDATE filmes SET filme = 'filme1', preco = '80' WHERE id = 85 $pdo = conectar(); $sql = "UPDATE $tabela SET "; $filmes = new ArrayIterator($dados) while($filmes>valid()): $sql. = $filmes>key(). " = ? ,"; $filmes>next; endwhile; Guia Persistência de dados com PHP + DEVMEDIA http://www.devmedia.com.br/ 28/10/2016 CRUD com PHP PDO http://www.devmedia.com.br/crudcomphppdo/28873 8/10 //$sql = substr($sql, 0, 1); $sql2 = rtrim($sql, ','); $sql2.= " WHERE id = ?"; $atualizar = $pdo > prepare($sql2); $i = 1; foreach($dados as $valor) $atualizar>bindValue($i, $valor); $i++; endforeach; echo $sql; $atualizar>bindValue($i, $id); $atualizar > execute(); } No index.php usaria desse jeito. Gostaria de saber como fazer o mesmo para os outros métodos. <?php require_once 'functions.php'; if (isset($_GET['update'])): $id = $_GET['update']; atualizar('filmes', $id, array("filme" => "Duro de Matar 2", "preco" => "95")); endif; ?> <div id="container"><h2> UPDATE GENERICO </h2> <?php $listar = listar(); $filmes = new ArrayIterator($listar); while ($filmes > valid()): ?> <p>Nome: <?php echo $filmes>current()>filme; ?> | <a href="?update=<?php echo $filmes>current()>id; ?>">Edit</a></p> <?php $filmes > next(); endwhile; ?> </div> há +1 ano Frederico Brigatte*** é que nesse trecho que postei, é de um exemplo que tenho aqui usando OO, sem ser em PDO, gostaria de converter para PDO. há +1 ano Douglas Claudio Olá Frederico, obrigado pelo seu comentário. Enviamos sua solicitação ao Ricardo e estamos no aguardo de um feedback do mesmo. Um abraço. há +1 ano [autor] Ricardo Arrigoni Frederico, você está tentando fazer um insert em PDO usando um código de update em OO, por favor, use o exemplo que dei no artigo de INSERT em PDO <?php try { $pdo = new PDO('mysql:host=localhost;dbname=meuBancoDeDados', $username, $password); $pdo>setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $pdo>prepare('INSERT INTO minhaTabela VALUES(:nome)'); $stmt>execute(array( ':nome' => 'Ricardo Arrigoni' )); echo $stmt>rowCount(); } catch(PDOException $e) { echo 'Error: ' . $e>getMessage(); ?> há +1 ano Frederico Brigatte*** Guia Persistência de dados com PHP + DEVMEDIA http://www.devmedia.com.br/ 28/10/2016 CRUD com PHP PDO http://www.devmedia.com.br/crudcomphppdo/28873 9/10 Mas eu quero passar a tabela e os campos. Como faço? há +1 ano Douglas Claudio Olá Frederico, obrigado pelo seu comentário. Enviamos sua solicitação ao Ricardo e estamos no aguardo de um feedback do mesmo. Um abraço. há +1 ano Wesley Yamazack Olá Frederico, tudo bem? Sua dúvida está além do objetivo do post, o que podemos fazer é tentar ver com algum autor para fazermos um artigo, ou então postarmos sua dúvida no nosso fórum, o que acha? Um abraço e até mais. há +1 ano Adicionar um comentário... Jamir Santos Ricardo! excelente post, foi possível fazer uma analogia com outras alternativas e perceber os benefícios apresentados. Mas na qualidade de principiante em PHP, deixo um pedido ao próprio Ricardo eu algum outro membro que tenha tempo e conhecimento: Disponibilizar a parte visual da aplicação seria muito interessante para o entendimento como um todo. há +1 ano [autor] Ricardo Arrigoni Opa Jamir, muito obrigado pelo comentário! Quanto a parte visual, qualquer formulário simples html pode ser usado no exemplo, assim que der vou providenciar um exemplo prático e completo e disponibilizo pra download. há +1 ano Adicionar um comentário... Luiz Costa eu fiz uma classe CRUD baseado em php PDO a pouco tempo. A PDO não tem muito mistério: é simples, rápida e robusta, a consulta responde mais rápido do que usando um pg_query ou mysql_query. Infelizmente, ainda existem servidores de hospedagem que não possuem suporte à biblioteca, problema que encontrei recentemente com um provedor que um cliente meu já tinha o site hospedado e por questões de negócios não quis mudar. Conclusão: precisei refazer toda minha base programação. Boa matéria. Parabéns! há +1 ano [autor] Ricardo Arrigoni Opa Luiz, obrigado pelo comentário. Apenas adicionando, é bom lembrar que a função mysql_query foi considerada deprecated pelo manual do PHP, sendo o correto usar a função mysqli_ ou o próprio PDO. Infelizmente alguns servidores realmente param no tempo e prejudicam os desenvolvedores/clientes. há +1 ano Luiz Costa agora pensa ter que refazer o CRUD todo em mysql_ ... tenso... há +1 ano [autor] Ricardo Arrigoni Realmente rsrs Mais uma vez obrigado pelo comentário :) há +1 ano Adicionar um comentário... Guia Persistência de dados com PHP + DEVMEDIA http://www.devmedia.com.br/ 28/10/2016 CRUD com PHP PDO http://www.devmedia.com.br/crudcomphppdo/28873 10/10 Mais posts Microartigo Como validar formulários no CodeIgniter Microartigo Primeiros passos com Yii Framework Microartigo Usando o Google Recaptcha com CodeIgniter Microartigo Publicando aplicações PHP no IIS 8 Microartigo Upload de arquivos no CodeIgniter Listar mais conteúdo PHP CODEIGNITER PHP YII FRAMEWORK PHP PHP FRAMEWORK PHP PHP PHP CODEIGNITER CODEIGNITER FRAMEWORK PHP Publique | Assine | Fale conosco Hospedagem web por Porta 80 Web Hosting Você e outros 5 amigos curtiram isso DevMedia 126 mil curtidasCurtiu Guia Persistência de dados com PHP + DEVMEDIA http://www.devmedia.com.br/como-validar-formularios-no-codeigniter/37167 http://www.devmedia.com.br/primeiros-passos-com-yii-framework/36850 http://www.devmedia.com.br/usando-o-google-recaptcha-com-codeigniter/36832 http://www.devmedia.com.br/publicando-aplicacoes-php-no-iis-8/36780 http://www.devmedia.com.br/upload-de-arquivos-no-codeigniter/36741 http://www.devmedia.com.br/php https://www.facebook.com/DevmediaWeb03/ https://www.instagram.com/devmedia.com.br/ http://twitter.com/devmedia https://plus.google.com/101753743720604160232?prsrc=3 http://www.devmedia.com.br/feed/ http://www.devmedia.com.br/seja-um-autor-devmedia/28103 http://www.devmedia.com.br/mvp/ http://www.devmedia.com.br/fale-conosco/ http://www.porta80.com.br/ https://www.facebook.com/fernando.dipace.18 https://www.facebook.com/daniel.marx.1614 https://www.facebook.com/JeeRed https://www.facebook.com/daniel.conceicao.963 https://www.facebook.com/roliandro.barbosa https://www.facebook.com/guilherme.perim.18 https://www.facebook.com/renatogroffe https://www.facebook.com/natansantthos https://www.facebook.com/jessika.rayssa.9 https://www.facebook.com/felipe.cruz.777701 https://www.facebook.com/robson.diniz.357 https://www.facebook.com/profile.php?id=100011122023454 https://www.facebook.com/ermelinda.furtado.9 https://www.facebook.com/DevmediaWeb03/ https://www.facebook.com/DevmediaWeb03/ https://www.facebook.com/DevmediaWeb03/ http://www.devmedia.com.br/
Compartilhar