Um amigo meu e eu estávamos escrevendo códigos para um site que utilizava PHP para criar as API’s e o MySQL para fazer a conexão com o Banco de Dados. O meu amigo não utilizava o PDO por que não sabia como usar, e por isso estou criando esse tutorial, para ajudar as pessoas que como ele, não sabem utilizar a tão conhecida classe PDO presente no PHP.
● Habilitando o PDO
Se você está usando algum programa que crie um servidor web local, provalvelmente o PDO já estará habilitado nele, mas é sempre bom ter certeza. Para habilitar o PDO na sua máquina, é necessário que você encontre o caminho do arquivo php.ini e retire os comentários (;) das linhas a seguir.
- Habilitando PDO no Windows
extension=php_pdo.dll
extension=php_pdo_mysql.dll
- Habilitando PDO no Linux
extension=pdo.so
extension=pdo_mysql.so
● Instanciando e configurando a classe PDO
Primeiramente vamos criar a nossa estrutura de pastas para ficar um trabalho organizado:
+ php-pdo-tutorial/
• index.php
+ classes/
+ models/
• db.php
Após criar o nosso diretório, tudo relacionado ao banco de dados, iremos escrever no arquivo db.php.https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgiphy.com%2Fembed%2Fl2JHQzrwFCOw98rMA%2Ftwitter%2Fiframe&display_name=Giphy&url=https%3A%2F%2Fgiphy.com%2Fgifs%2Fgrease-live-grease-live-tell-me-more-l2JHQzrwFCOw98rMA&image=https%3A%2F%2Fmedia0.giphy.com%2Fmedia%2Fl2JHQzrwFCOw98rMA%2Fgiphy.gif&key=a19fcc184b9711e1b4764040d3dc5c07&type=text%2Fhtml&schema=giphy
No arquivo db.php, vamos criar a nossa classe Models e criar uma instância da classe PDO:
Viu como é simples? Primeiro nós criamos uma variável pública chamada $pdo, depois iniciamos o nosso método construtor (Aquele método que é chamado assim que instanciamos uma classe), depois indicamos que a váriavel $pdo irá conter a instância da classe PDO.
Ao instanciarmos o PDO, é obrigatório passarmos 3 parâmetros para que ocorra tudo certo.
- 1° Parâmetro: Nele você indica qual o seu host, se for um servidor local, o padrão é localhost, mas pode variar. E dbname que é o nome do seu banco de dados.
- 2° Parâmetro: O segundo parâmetro é basicamente o nome de usuário que você usa para acessar o seu banco de dados. O padrão de nome de usuário para programas que criam um servidor local é root.
- 3° Parâmetro: Assim como o segundo, o terceiro parâmetro também é bem simples, é a senha que você usa para acessar o seu banco de dados. Diferente do nome de usuário, por padrão o seu banco de dados local não usa nenhuma senha, ou seja a senha é uma string vazia (duas aspas simples ou duplas sem nenhum conteúdo dentro.
Observação: Você pode usar bancos de dados externos, alterando o host para o host que seu banco de dados está hospedado.
● Criando a nossa base de dados
Nesse tutorial irei usar o phpMyAdmin para criar a base de dados, mas você pode usar o que preferir, inclusive um terminal.
Primeiro clicamos em New (se encontra na barra lateral) para criarmos uma nova base de dados. Depois você coloca o nome da sua BD (base de dados) eu coloquei “meu_banco_de_dados” e escolhe o formato que preferir, o mais usado é o utf8-bin. E por último, clicamos em “Create” para criar a nossa BD.
Agora nós iremos criar uma tabela para a nossa BD, eu coloquei o nome “usuarios” observe que não utilizei nenhum acento e nem espaços, é uma boa prática para não ter problemas futuros, ao invés de espaço, utilize o _ (underline) para separar as palavras. Selecionamos o número de colunas, eu optei por escolher 4 colunas, para armazenar 4 dados de cada usuário.
- 1° Coluna id: Para o id o tipo padrão é INT, pois será sempre um número inteiro de 1 ao infinito e além! o id será incrementado automaticamente quando fizermos uma inserção no nosso banco de dados, ele é único para cada usuário, mais para frente você verá o quão útil ele é. Para o id ser incrementado automaticamente, devemos marcar a opção A_I (Auto Increment) na linha em que ele se encontra. Não é preciso colocarmos um tamanho para limitar ele, pois ele é uma row (linha) muito importante na nossa BD.
- 2° Coluna nome: Para a coluna nome irei colocar o tipo VARCHAR que é basicamente o tipo “string” no MySQL, e o tamanho eu coloquei 255 que também é uma boa prática, e é mais que necessário 255 letras para o nome de alguém.
- 3° Coluna email: A coluna email segue o mesmo raciocínio que a coluna nome, usei o tipo VARCHAR com um tamanho de 255 Chars (Caracteres).
- 4° Coluna senha: A coluna senha será a responsável por armazenar a senha do usuário, ela será do tipo VARCHAR e assim como as outras colunas, essa também terá um valor de 255 Chars.
Depois clicamos em “Save” para salvar a nossa tabela.
● Inserindo valores na base de dados usando o PDO
Agora chegou a parte boa, a parte em que colocamos a mão no código.https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgiphy.com%2Fembed%2F29rsFlMw8wLlxOCPH1%2Ftwitter%2Fiframe&display_name=Giphy&url=https%3A%2F%2Fgiphy.com%2Fgifs%2Fpbskids-yes-excited-29rsFlMw8wLlxOCPH1&image=https%3A%2F%2Fmedia3.giphy.com%2Fmedia%2F29rsFlMw8wLlxOCPH1%2Fgiphy.gif&key=a19fcc184b9711e1b4764040d3dc5c07&type=text%2Fhtml&schema=giphy
No código acima eu criei uma função chamada insert_values (Insere valores), como o próprio nome diz, ela será usada para inserirmos valores na nossa BD.
$sql = "INSERT INTO usuarios (nome, email, senha) VALUES (?, ?, ?)";
Na linha acima, nós criamos uma variável que irá conter um código SQL, o código SQL sempre terá que estar entre aspas simples ou duplas.
- INSERT: Esse comando indica que estamos querendo inserir algo na nossa base de dados.
- INTO: Esse comando é um complemento para o comando INSERT, ele indica a tabela e as linhas que receberam os novos valores. INSERT INTO (Insira dentro de).
- VALUES: Esse comando indica quais valores serão inseridos. Ah, mas por que os pontos de interrogação? O ponto de interrogação é uma prática utilizada para protegermos nossa base de dados de um ataque SqlInjection (Injeção de código Sql), depois nós usamos a função bindParam() para indicarmos o valor de cada ponto de interrogação.
$senha = md5($senha);
Aqui eu usei a função md5(), nativa do PHP, para criptografarmos a senha do usuário, para que ninguém tenha acesso à senha do usuário caso consiga de alguma forma, acesso ao banco de dados ou aos dados do mesmo. E também é necessário para evitar problemas no futuro com leis, por exemplo, a LGPD (Lei Geral de Proteção de Dados).
$bd = $this->pdo->prepare($sql);
Lembra daquela variável chamada $pdo que criamos lá no começo? Então agora nós iremos usar ela para utilizar as funções do PDO, criamos uma variável chamada $bd que recebe $this->pdo->prepare($sql).
- $this: é uma Pseudo-variável do PHP, que usamos para referenciar uma função ou variável presente na nossa classe. $this->pdo faz referência a variável $pdo que guarda a instância do PDO.
- $this->pdo->prepare(): O $this faz referência a variável $pdo, que chama a função prepare() do PDO.
$bd->bindParam(1, $nome);$bd->bindParam(2, $email);$bd->bindParam(3, $senha);
Agora que a variável $bd faz referência a função prepare() do PDO, nós podemos usá-la para chamar algumas funções referentes à função prepare(). Por exemplo a função bindParam que por padrão recebe 2 parâmetros.
- 1° Parâmetro: A posição do valor, cada ponto de interrogação do VALUES (?, ?, ?) ocupa uma posição, cada posição faz referência à um valor do usuarios (nome, email, senha). O primeiro ponto de interrogação é para o nome, o segundo ponto de interrogação para o email, e segue essa regra para todos os valores.
- 2° Parâmetro: O valor que será substituído pelo ponto de interrogação.
$bd->execute();
Na linha acima nós fazemos a chamada da função que executa todo o código SQL que fizemos.
● Inserindo na Base de Dados
Agora nós iremos voltar lá no arquivo index.php, que criamos anteriormente, e vamos criar uma instância da classe Models que fizemos.
No código acima, nós incluimos o arquivo db.php que contém a nossa classe Models, e depois criamos uma variável chamada $bd e atribuímos a instância da classe Models.
echo $bd->insert_values("Gabriel", "gabrielmrts@yahoo.com", "123123");
Depois disso, nós invocamos a função insert_values() que está presente na nossa classe Models, por padrão ela recebe 3 parâmetros, que são nome, email e senha.
Ao acessar o arquivo index.php no nosso servidor local, todo o código é executado, e se tudo ocorrer certo, teremos esse retorno:
E quando vamos verificar na nossa Base de Dados:
Viu como é simples e prático utilizar o PDO?
● Fazendo consultas na base de dados
Para podermos consultar dados de usuários na nossa base de dados, usamos a função SELECT (Selecione).
As regras do PDO são basicamente as mesmas, primeiro usa prepare(), depois o execute() e depois é só tratar os dados, mas vamos linha por linha.
$sql = "SELECT * FROM usuarios";
- SELECT: Indica que estamos querendo selecionar dados na base de dados para consumirmos eles.
- FROM: Indica a tabela que queremos selecionar.
- *: SELECT *, Selecione Tudo.
Traduzindo, SELECT * FROM usuarios significa SELECIONE TUDO DE usuarios.
E também podemos pegar apenas os dados que queremos:
SELECT nome, email FROM usuarios
Voltando ao código, agora temos algo de diferente, um laço de repetição.
while ($row = $bd->fetch(PDO::FETCH_OBJ))
Aqui nós atribuímos a variável $row à uma função do PDO, a fetch().
A função fetch recebe um parâmetro obrigatório, que é o método que você vai utilizar para receber os dados. No nosso caso o PDO::FETCH_OBJ que retorna para nós um objeto contendo o resultado da consulta, juntamente com os dados. O laço de repetição no nosso caso é usado para, enquanto houver dados, armazene-os dentro da variável $row.
if ($row){ return $row;}
Se existir $row ou seja, dados, retorne os dados :).
Veja que agora estamos usando o print_r() para mostrar na tela, isso por que o echo é feito apenas para mostrar strings e nós estamos recebendo um array da nossa função get_all() e o print_r() e var_dump() são feitos para mostrar não só strings mas também arrays.https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgiphy.com%2Fembed%2Fl4FAPaGGeB7D1LfIA%2Ftwitter%2Fiframe&display_name=Giphy&url=https%3A%2F%2Fgiphy.com%2Fgifs%2Ffilmeditor-the-end-airplane-movie-l4FAPaGGeB7D1LfIA&image=https%3A%2F%2Fmedia2.giphy.com%2Fmedia%2Fl4FAPaGGeB7D1LfIA%2Fgiphy.gif&key=a19fcc184b9711e1b4764040d3dc5c07&type=text%2Fhtml&schema=giphy
Se você leu até aqui é por que gostou do tutorial, né? Se quiser dar uma olhada no código, clica aqui.
Espero de coração, que esse tutorial tenha te ajudado de alguma forma, pois a intenção é ajudar o próximo.
Mas é isso galera, até a próxima ️❤️.