PHP: Inserindo Registros no Banco de Dados MySQL
No artigo anterior (Clique Aqui para Acessar), vimos como criar uma página PHP, criar cabeçalhos e rodapés para evitar repetição de código e como ler parâmetros.
Ou seja, o que falta agora é inserirmos esses parâmetros no banco de dados. Como já instalamos o MySQL (o XAMPP instalou para nós), vamos fazer uso dele.
Veja também: Os Melhores Cursos GRATUITOS Com Certificado
Confira neste artigo:
Ativando o MySQL
Primeiramente, devemos levantar o servidor do MySQL e conectar nele. Se formos no painel de controle do XAMPP, vemos que o MySQL está desativado.
Ou seja, para ativar basta clicar no botão Start. Dependendo do seu sistema operacional, esse processo pode ser feito de maneira diferente.
Com o MySQL no ar, podemos ir no PHPMyAdmin, que é um excelente administrador de MySql, que vem no XAMPP. Basta clicar no link que existe na página dashboard do XAMPP, e estamos nele.
Portanto, se a tela inicial peça o nome do utilizador, digite “root” e deixe o campo de senha em branco.
Criando Banco de Dados MySQL
Primeiramente, dentro do phpMyAdmin, vamos clicar em New/Novo para criar uma nova Base de Dados, vamos criar um novo banco chamado “loja“.
Com o banco criado, vamos criar a tabela que armazenará a lista de produtos. Na aba SQL, digite o comando abaixo:
create table produtos (id integer auto_increment primary key, nome varchar(255), preco decimal(10,2));
Clicando em Executar, a tabela será criada. Não vou entrar muito a fundo em SQL. Mais para frente vou publicar artigos sobre SQL.
Inserindo Dados no MySQL
Agora que criamos a nossa tabela, vamos inserir alguns produtos para ver o MySql funcionando.
Novamente, na aba SQL, digite os comandos abaixo e execute:
insert into produtos values (1, 'Carro', 20000);
insert into produtos values (2, 'Motocicleta', 10000);
Além disso, repare que os produtos inseridos nós informamos para o MySQL o ID do produto. Como a nossa tabela possui o “auto_increment” na coluna ID, podemos forçar o auto incremento, não passando o ID.
Digite o comando abaixo e execute:
insert into produtos (nome, preco) values ('Bicicleta', 300);
Repare que mesmo sem informar a coluna ID do Produto, o MySQL pegou o ultimo ID que é o numero 2, auto incrementou para incluir o próximo produto, gerando o ID numero 3.
Ou seja, se clicarmos em Browse, vemos a lista de todos os produtos adicionados. No nosso caso, 3 produtos.
Agora que temos um banco de dados no nosso MySql, vamos fazer o PHP inserir algo nele.
Conectando o PHP no MySQL
Voltando a editar o arquivo adiciona-produto.php, vamos escrever os comandos SQL nele:
<?php include("cabecalho.php"); ?>
<?php
$nome = $_GET["nome"];
$preco = $_GET["preco"];
$query = "insert into produtos (nome, preco) values (?????)";
?>
Produto: <?= $nome; ?>, preco: <?= $preco; ?> - adicionado com sucesso!
<?php include("rodape.php"); ?>
Veja que guardamos a query em uma variável ($query), mas precisamos trocar os “??” pelos valores passados pelo usuário.
Geralmente, é comum que desenvolvedores concatenem esses valores na mão. Algo como:
$query = "insert into produtos (nome, preco) values ('" . $nome . "', " . $preco . ")";
Repare que o ponto (.) soma duas strings. Mas o problema disso é que é muito trabalhoso. O PHP nos dá uma maneira mais fácil de misturar strings e variáveis.
Chamamos isso de interpolação, e para isso, basta usar o símbolo chaves “{“ e “}”:
$query = "insert into produtos (nome, preco) values ('{$nome}', {$preco})";
O PHP vai automaticamente pegar o valor da variável nome e preço e concatenar na string.
Fica mais fácil de ler. Mas repare que isso só funciona se a string for declarada com aspas duplas.
Vamos continuar, e mandar essa SQL para o banco de dados. A primeira coisa que devemos fazer é conectarmos no banco de dados, passando endereço, usuário e senha.
Para isso vamos utilizar a função mysqli_connect conforme exemplo abaixo:
$conexao = mysqli_connect('localhost', 'root', '', 'loja');
Em seguida, executamos a query através do comando mysqli_query:
mysqli_query($conexao, $query);
Por fim, fechamos a conexão utilizando o comando mysqli_close:
mysqli_close($conexao);
O nosso código completo ficou dessa forma:
<?php include("cabecalho.php"); ?>
<?php
$nome = $_GET["nome"];
$preco = $_GET["preco"];
$query = "insert into produtos (nome, preco) values ('{$nome}', {$preco})";
$conexao = mysqli_connect('localhost', 'root', '', 'loja');
mysqli_query($conexao, $query);
mysqli_close($conexao);
?>
<p class="alert-success">
Produto: <?= $nome; ?>, preco: <?= $preco; ?> - adicionado com sucesso!
</p>
<?php include("rodape.php"); ?>
Se testarmos agora a inserção de um lápis pelo formulário, isso deve funcionar. Vamos passar os valores através da URL.
Em seguida vamos acessar o MySql para ver que a linha foi adicionada.
Ao consultar o banco de dados, vimos que o produto Lápis foi realmente adicionado. Veja só como acessar o MySql pelo PHP é fácil. Basta apenas conhecer alguns métodos da biblioteca.
Validação de Dados com PHP
Mas existe um problema agora. Veja só o que acontece se não passarmos o nome e preço na página adiciona-produto.php.
Apesar da aplicação web falar que a inserção foi feita, se formos no MySql, vemos que nenhuma linha foi adicionada.
Isso acontece porque o MySql deu um erro (afinal a SQL, sem nome e preço, fica errada!), mas nós não tratamos esse erro.
Precisamos então tratar esse erro, e fazemos isso na função de mysqli_query. Ela devolve true em caso de sucesso, ou false em caso de falha.
Então vamos inserir em nosso código, algo parecido com essa estrutura abaixo:
if(mysqli_query($conexao, $query)) {
// funcionou
} else {
// nao deu certo
}
Vamos agora misturar HTML com PHP, e mostrar a mensagem de sucesso apenas se realmente deu sucesso:
if(mysqli_query($conexao, $query)) {
?>
<p class="alert-success">
Produto: <?= $nome; ?>, preco: <?= $preco; ?> - adicionado com sucesso!
</p>
<?php
} else {
?>
<p class="alert-danger">
ERRO - O produto não foi adicionado!
</p>
<?php
}
?>
Utilizando o código acima, a nossa aplicação retorna um erro amigável caso a inserção falhe.
Enfim, um detalhe curioso do PHP é que ele fecha a conexão do MySQL automaticamente. Ou seja, não precisamos colocar a linha mysqli_close().
Nesse caso, quando a última linha do seu script for executada, aí sim ele a fechará.
Resultado Final
Como nesse capitulo alteramos somente o arquivo adiciona-produto.php vou deixar o código dele abaixo para você estudar as alterações:
<?php include("cabecalho.php"); ?>
<?php
$nome = $_GET["nome"];
$preco = $_GET["preco"];
$query = "insert into produtos (nome, preco) values ('{$nome}', {$preco})";
$conexao = mysqli_connect('localhost', 'root', '', 'loja');
if(mysqli_query($conexao, $query)) {
?>
<p class="alert-success">
Produto: <?= $nome; ?>, preco: <?= $preco; ?> - adicionado com sucesso!
</p>
<?php
} else {
?>
<p class="alert-danger">
ERRO - O produto não foi adicionado!
</p>
<?php
}
?>
<?php include("rodape.php"); ?>
Conclusão
Em conclusão, neste artigo aprendemos com inserir registros dentro do banco de dados MySQL. Além de dar mais um passo para construção do nosso sistema.
Ou seja, aprendemos a utilizar as funções:
- mysqli_connect – Para conectarmos no banco de dados.
- mysqli_query – Para executar uma query no banco de dados.
- mysqli_close – Para fechar a conexão com o banco de dados.
Além disso, vimos também como validar se o registro foi realmente incluído no MySQL utilizando a condição If/Else com a função mysqli_query, que retorna para nós o resultado true ou false.
Espero que este artigo tenha te ajudado a dar mais um passo em busca de seus objetivos. 😉
Gostou do conteúdo?
Comente aqui em baixo o que você achou desse artigo.
Clique no botão abaixo para acessar mais de 1400 cursos completos e com certificado válido. Invista em você e conquiste uma excelente carreira profissional na área da tecnologia.
ACESSAR CURSOS COM CERTIFICADOUm forte abraço!
Sobre o Autor
5 Comentários
Ajudou muuuuuitooooooo
Valeu meu amigo!!! Tamo junto!!
Código muito bom, mas estou com uma duvida. Toda vez que aperto F5 para atualizar a pagina, ele grava novamente os dados no BD. Como faço para não correr esse risco?
Ajudou demais, um dos poucos tutoriais que encontrei que funcionou certinho.
Obrigado pelo feedback. Fico feliz em ajudar.