Nenhum produto encontrado nessa seleção.
Trabalhar com PHP é sinônimo de trabalhar com páginas dinâmicas, e não há a possibilidade de imaginar páginas dinâmicas sem uma base de dados onde salvar os dados.
PDO é uma classe PHP que representa a conexão entre o PHP e o servidor de banco de dados. Com essa classe é possível adicionar, excluir e editar dados presentes em bancos de dados e tabelas de vários SGBDs diferentes, tais como MySQL, SQLite, PostgreSQL, e outros.
Para esse tutorial em específico, vamos aprender a conectar e manipular dados de bases de dados MySQL utilizando PDO.
Então vamos lá.
Criando o banco de dados
Antes de qualquer coisa, precisamos criar uma base de dados em nosso servidor MySQL para conectar-se posteriormente com PDO. Felizmente, ontem explicamos como fazer isso utilizando o phpMyAdmin:
Vou criar uma base de dados chamada contatos.
Você pode fazer isso pelo phpMyAdmin (como explicado no artigo mencionado anteriormente), ou diretamente pelo servidor MySQL. Se estiver utilizando o servidor MySQL, vou detalhando o que vou fazer, e logo em seguida mostrarei o comando.
Comando MySQL:
CREATE DATABASE `contatos`;
Depois criei um usuário chamado user_db_contatos, senha senha_db_contatos, com permissão somente na base de dados contatos.
Comando MySQL:
CREATE USER 'user_db_contatos' @'%' IDENTIFIED BY 'senha_db_contatos' ; FLUSH PRIVILEGES; GRANT ALL ON `contatos`.* TO 'user_db_contatos'@'%';
Logo em seguida, criei uma tabela chamada tabela_contatos com os seguintes campos:
- ID – contato_id
- Nome – contato_nome
- Sobrenome – contato_sobrenome
- Email – contato_email
- Site – contato_site
- Data de nascimento – contato_data_nascimento
- Telefone – contato_telefone
- Descrição – contato_descricao
Comando MySQL:
CREATE TABLE `contatos`.`tabela_contatos` ( `contato_id` INT (11) NOT NULL AUTO_INCREMENT, `contato_nome` VARCHAR (40), `contato_sobrenome` VARCHAR (40), `contato_email` VARCHAR (50), `contato_site` VARCHAR (255), `contato_data_nascimento` DATETIME DEFAULT '0000-00-00 00:00:00', `contato_telefone` VARCHAR (25), `contato_descricao` TEXT, PRIMARY KEY (`contato_id`) ) ;
Perceba que não podemos adicionar acentos, ou caracteres estranhos para o nome de nossos campos, portanto, tente utilizar apenas letras, números e um caractere sublinhado (underline) para separar as palavras.
Crie a base de dados, o usuário e a tabela e vamos para a próxima parte da aula.
PDO – Conectando-se à base de dados
Depois de configurar a base de dados, podemos iniciar a configuração de nosso script de conexão PDO em PHP.
Vamos separar a conexão do arquivo principal, portanto, crie dois arquivos:
- index.php – Terá a configuração que o usuário vai ver na tela do navegador (sem PDO);
- conexao.php – Terá a configuração do nosso script PDO (será embutido no arquivo index.php);
Após a criação, abra o arquivo "conexao.php" e crie as seguintes variáveis:
<?php /* Variáveis para conexão PDO */ $base_dados = 'contatos'; $usuario_bd = 'user_db_contatos'; $senha_bd = 'senha_db_contatos'; $host_db = 'localhost';
Perceba que vou utilizar os dados das variáveis acima para a conexão PDO com a base de dados, portanto, preencha os valores corretamente. Se você alterou alguma coisa anteriormente, também terá que alterar os dados nas variáveis acima.
Para criar uma instância da classe PDO, basta fazer o seguinte:
// Instância PDO $conexao_pdo = new PDO('mysql:host=IP_OU_HOST_AQUI;dbname=NOME_DO_BD', 'USUÁRIO', 'SENHA');
Para a nossa conexão, vamos deixar isso um pouco mais simples:
<?php /* Variáveis PDO */ $base_dados = 'contatos'; $usuario_bd = 'user_db_contatos'; $senha_bd = 'senha_db_contatos'; $host_db = 'localhost'; $conexao_pdo = null; /* Concatenação das variáveis para detalhes da classe PDO */ $detalhes_pdo = 'mysql:host=' . $host_db . ';dbname='. $base_dados; // Tenta conectar try { // Cria a conexão PDO com a base de dados $conexao_pdo = new PDO($detalhes_pdo, $usuario_bd, $senha_bd); } catch (PDOException $e) { // Se der algo errado, mostra o erro PDO print "Erro: " . $e->getMessage() . "<br/>"; // Mata o script die(); } ?>
Você não precisa decorar isso, apenas altere os valores das variáveis e pronto, conectado à base de dados com a classe PDO instanciada em $conexao_pdo.
Exibindo dados na tabela MySQL com PDO
ATENÇÃO: Você vai precisar saber comandos MySQL para continuar essa leitura, caso não saiba nada, leia nos links abaixo:
Agora abra o arquivo index.php (ou o arquivo que você tiver criado anteriormente) e, na primeira linha, coloque o seguinte:
<?php include('conexao.php');?>
A função include do PHP faz a inclusão do que escrevemos no arquivo conexao.php para o arquivo index.php, assim nosso script ficará mais organizado.
Para iniciar qualquer ação com PDO, primeiramente temos que preparar o comando a ser executado pelo MySQL com o método PDO::prepare.
Veja um exemplo:
// A classe PDO prepara o comando a ser executado $prepara = $conexao_pdo->prepare('SELECT * FROM tabela_contatos');
Como você pode perceber acima, estamos preparando nosso servidor MySQL para receber o comando "SELECT * FROM tabela_contatos" (selecione tudo da tabela tabela_contatos).
Feito isso, é necessário executar o comando:
// A classe PDO executa o comando $prepara->execute();
Agora o comando que havíamos enviado anteriormente é executado. Porém, agora precisamos de mais um recurso para visualizar os dados, PDO::fetch. Este método nos retorna a linhas de uma consulta SQL, além disso, retorna true enquanto houver novas linhas. Isso indica que podemos utilizar o laço while para mostrar tudo o que for encontrado pelo comando que executarmos.
Por exemplo:
// Laço para exibir todas as linhas while ( $linha = $prepara->fetch() ) { echo 'Nome: ' . $linha['contato_nome'] . '<br>'; echo 'Sobrenome: ' . $linha['contato_sobrenome'] . '<br>'; // ... E assim por diante ... }
Observação: Você deve adicionar dados na tabela, caso contrário, nada será exibido na tela.
Perceba que você deve saber o nome dos campos que deseja exibir para utilizar com a variável criada na condição do laço while.
Quando precisamos enviar parâmetros para o comando – selecionar um ID em específico, por exemplo – devemos enviar um interrogação (?) para cada parâmetro.
Veja um exemplo:
// Prepara o comando a ser executado $prepara = $conexao_pdo->prepare('SELECT * FROM tabela_contatos WHERE contato_id = ?');
Perceba que estamos agora enviando o seguinte comando para o servidor MySQL: SELECT * FROM tabela_contatos WHERE contato_id = ? (selecione tudo da tabela tabela_contatos onde campo contato_id é igual a ? ).
Esse interrogação será enviado para o método PDO::execute como um array. Veja:
// Parâmetros do comando SQL $parametros = array( 2 ); // Executa o comando $prepara->execute( $parametros );
Ou seja, meu primeiro interrogação será substituído pelo número 2, que estou enviando como parâmetro.
Caso precise enviar mais parâmetros, basta adicionar interrogações em todos os locais onde iriam os valores, depois adicionar os valores no array de parâmetros. Por exemplo:
// Prepara o comando a ser executado $prepara = $conexao_pdo->prepare('SELECT * FROM tabela_contatos WHERE contato_id = ? OR contato_id = ?'); // Parâmetros do comando SQL $parametros = array( 2, 1 ); // Executa o comando $prepara->execute( $parametros ); // Laço para exibir todas as linhas while ( $linha = $prepara->fetch() ) { echo 'Nome: ' . $linha['contato_nome'] . '<br>'; echo 'Sobrenome: ' . $linha['contato_sobrenome'] . '<br>'; // ... E assim por diante ... }
Agora estou pedindo para exibir os IDs 1 e 2.
Você pode utilizar qualquer tipo de consulta, como "BETWEEN", "LIKE", e demais. Por exemplo, suponhamos que eu queira utilizar LIKE, veja:
<?php include('conexao.php');?> <?php // Prepara o comando a ser executado $prepara = $conexao_pdo->prepare( 'SELECT * FROM tabela_contatos WHERE contato_nome LIKE ? OR contato_nome LIKE ?' ); // Parâmetros do comando SQL $parametros = array( '%pedaço do nome%', '%outro pedaço%' ); // Executa o comando $prepara->execute( $parametros ); // Laço para exibir todas as linhas while ( $linha = $prepara->fetch() ) { echo 'Nome: ' . $linha['contato_nome'] . '<br>'; echo 'Sobrenome: ' . $linha['contato_sobrenome'] . '<br>'; // ... E assim por diante ... }
Perceba também que só iremos utilizar o laço while quando utilizarmos o comando "SELECT", para "UPDATE", "INSERT" e "DELETE", não é necessário (vamos falar sobre cada um dos comandos).
Inserindo dados na tabela MySQL com PDO
Para inserir dados na tabela, siga a mesma estrutura, porém, não é necessário utilizar o laço while.
Por exemplo:
<?php include('conexao.php');?> <?php // Prepara o comando a ser executado $prepara = $conexao_pdo->prepare( "INSERT INTO `contatos`.`tabela_contatos` ( `contato_nome`, `contato_sobrenome`, `contato_email`, `contato_site`, `contato_data_nascimento`, `contato_telefone`, `contato_descricao` ) VALUES ( ?, ?, ?, ?, ?, ?, ? )" ); // Parâmetros do comando SQL $parametros = array( 'José', 'Silva de Oliveira', '[email protected]/w', 'http://www.todoespacoonline.com/w', '1987-04-20 13:45:57', '+553588888888', 'Meu nome é José Silva de Oliveira e tenho 27 anos.' ); // Executa o comando $verifica = $prepara->execute( $parametros ); // Verifica se o comando foi executado if ( $verifica ) { echo 'Dados enviados à base de dados com sucesso'; } else { $erro = $prepara->errorInfo(); echo 'Ocorreu um erro na sua consulta. <br>'; echo 'Erro: ' . $erro[2]; }
Verifique que agora inseri dados na base de dados, e mesmo assim tudo continua o mesmo. Onde eu deveria colocar valores; coloco interrogações. Depois substituo os pontos de interrogação por valores do array de parâmetros. Os pontos de interrogação serão substituídos na mesma ordem em que foram adicionados no array.
Como o método PDO::execute retorna true se o comando for executado com sucesso, podemos fazer a verificação para saber se os dados foram enviados para a base de dados corretamente:
// Verifica se o comando PDO foi executado com sucesso if ( $verifica ) { echo 'Dados enviados à base de dados com sucesso'; } else { $erro = $prepara->errorInfo(); echo 'Ocorreu um erro na sua consulta. <br>'; echo 'Erro: ' . $erro[2]; }
Editando dados da tabela MySQL com PDO
Para editar dados não muda muita coisa, porém, é mais seguro se enviarmos o ID da linha que queremos editar. Veja:
<?php include('conexao.php');?> <?php // Prepara o comando a ser executado $prepara = $conexao_pdo->prepare( "UPDATE tabela_contatos SET contato_nome = ? WHERE contato_id = ? " ); // Parâmetros do comando SQL $parametros = array('Serafim', 6); // Executa o comando $verifica = $prepara->execute( $parametros ); // Verifica se o comando foi executado if ( $verifica ) { echo 'Dados enviados à base de dados com sucesso'; } else { $erro = $prepara->errorInfo(); echo 'Ocorreu um erro na sua consulta. <br>'; echo 'Erro: ' . $erro[2]; }
Ou seja, estou executando um comando que modifica o nome que estiver na linha de ID 6 para "Serafim". Simples assim.
Excluindo dados da tabela MySQL com PDO
Para excluir dados é mais simples ainda.
Basta enviar o comando e executar:
<?php include('conexao.php');?> <?php // Prepara o comando a ser executado $prepara = $conexao_pdo->prepare("DELETE FROM tabela_contatos WHERE contato_id = ?"); // Parâmetros do comando SQL $parametros = array( 6 ); // Executa o comando $verifica = $prepara->execute( $parametros ); // Verifica se o comando foi executado if ( $verifica ) { echo 'Linha excluída.'; } else { $erro = $prepara->errorInfo(); echo 'Ocorreu um erro na sua consulta. <br>'; echo 'Erro: ' . $erro[2]; }
Pronto, agora excluí a linha com ID 6 (contato_id = 6).
Vídeo tutorial: PDO em PHP
Assista a um vídeo tutorial para complementar o artigo acima:
Concluindo
Este é o método mais seguro para manipular dados de bases de dados em PHP. Além de prevenir SQLInjection, os outros métodos que utilizávamos antigamente estão obsoletos.
Caso tenha qualquer dúvida, basta deixar um comentário. Será um prazer ajudar.
Não deixe de acessar outras aulas do nosso curso gratuito de PHP.