Como Usar PHP para Inserir Dados num Banco de Dados MySQL
Neste tutorial, você vai aprender como INSERIR dados no seu banco de dados MySQL a partir de scripts PHP. Existem dois métodos que você pode usar, MySQLi e PDO.
Antes de você começar esse guia de inserção no MySQL via PHP, você vai precisar de acesso ao painel de controle do seu servidor de hospedagem.
Se você ainda tem dúvidas sobre como configurar sua conexão MySQL, pode conferir este tutorial sobre PHPMySQL, que cobre os passos mais importantes de trabalhar com PHP e bancos de dados.
Como Criar uma Tabela (Opcional)
Primeiro, temos que criar uma tabela para os seus dados. Se você já criou uma, siga em frente para a próxima seção.
É um processo muito simples que você pode fazer com o phpMyAdmin, que é localizado no painel de controle da sua hospedagem.
Depois de fazer login na sua página de phpMyAdmin, você deverá ver algo parecido com a imagem abaixo:
DNós vamos criar uma tabela chamada Students para o nosso banco de dados u266072517_name. Você pode criar uma nova tabela clicando em Create Table. Depois disso, você verá esta nova página onde você pode inserir todas as informações necessárias para sua tabela:
Esta é a configuração mais simples que você pode usar para uma tabela, para mais informações sobre a estrutura da tabela/ banco de dados e quais os tipos configurações você pode usar com esta coluna, consulte o documento oficial do phpMyAdmin.
Por enquanto, veja uma breve explicação das colunas que usamos:
- Name – Este é o nome da sua coluna. Será exibido no topo da sua tabela.
- Type – Aqui você pode configurar o tipo da coluna aqui. Por exemplo, nós selecionamos varchar porque precisamos selecionar um tipo de nome aqui (que tenha letras, não números).
- Length/Values – Usado para especificar o comprimento máximo que sua entrada nesta coluna possa ter.
- Index – Nós usamos o índice “Primary” para o campo “ID”. Ao criar uma tabela, é recomendado ter uma coluna ID. É usado para enumerar entradas da tabela e necessária quando configurar a tabela. Também selecionamos “A_I”, que significa Auto Increment. Isto vai enumerar as entradas automaticamente (1, 2, 3, 4…).
Clique em Save (Salvar) e sua tabela estará pronta.
Como Escrever o Código PHP para Inserir Dados no Banco de Dados MySQL
Existe dois métodos que você pode usar para fazer o INSERT (Inserção) de dados na sua database MySQL. São eles: método PHP MySQLi e PHP Data Object (ou método PDO).
Método MySQLi
Primeiro de tudo, você deve estabelecer uma conexão com o banco de dados. Depois dessa etapa, podemos prosseguir com o INSERT do query do MySQL. Aqui está um exemplo de código completo com os métodos básicos de conexão e inserção:
<?php $servername = "mysql.hostinger.co.uk"; $database = "u266072517_name"; $username = "u266072517_user"; $password = "buystuffpwd"; // Create connection $conn = mysqli_connect($servername, $username, $password, $database); // Check connection if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } echo "Connected successfully"; $sql = "INSERT INTO Students (name, lastname, email) VALUES ('Test', 'Testing', 'Testing@tesing.com')"; if (mysqli_query($conn, $sql)) { echo "New record created successfully"; } else { echo "Error: " . $sql . "<br>" . mysqli_error($conn); } mysqli_close($conn); ?>
A primeira parte do código (linhas 3 – 18) é sobre a atual conexão do banco de dados. Não vamos passar pelo processo todo novamente. Contudo, se você deseja saber o que cada linha de código significa, confira nosso tutorial sobre como se conectar a um banco de dados.
Vamos começar pela linha 19:
$sql = "INSERT INTO Students (name, lastname, email) VALUES ('Test', 'Testing', 'Testing@tesing.com')";
Esta é a linha mais importante do nosso código e que executa tudo o que a gente quer aprender neste tutorial – inserir dados MySQL PHP. O INSERT INTO é uma instrução que adiciona dados em banco de dados específicos da tabela. Neste exemplo, estamos adicionando dados à tabela Students.
Seguindo adiante, entre os colchetes, temos as colunas de tabela para as quais queremos adicionar valores (name, lastname, email). Os dados vão ser preenchidos na ordem especificada. Se escrevêssemos (email, lastname, name), os valores seriam adicionados na ordem errada.
A próxima parte é sobre a declaração VALUES. Aqui especificamos os valores para as colunas determinadas anteriormente. Dessa maneira, cada coluna representa um valor específico. Por exemplo, no nosso caso ele seria: name = Thom, lastname = Vial, email = thom.v@some.com.
Outra coisa relevante é que acabamos de executar a SQL Query usando um código PHP. Lembrando que as SQL Queries devem ser posicionados entre as citações. No nosso exemplo, tudo o que está entre citações e depois de $sql = é uma SQL Query.
A próxima parte do código (linhas 20 – 22) mostra se nosso pedido foi feito com sucesso.
if (mysqli_query($conn, $sql)) { echo "New record created successfully"; }
Ele simplesmente mostra uma mensagem de sucesso se o pedido que executamos foi realizado.
E a parte final (linhas 22 – 24) mostra uma mensagem diferente caso o pedido não seja executado com sucesso:
else { echo "Error: " . $sql . "<br>" . mysqli_error($conn); }
Ele vai mostrar uma mensagem de erro caso algo dê errado.
Método PHP Data Object (PDO)
Assim como no exemplo anterior, precisamos primeiro de uma conexão com o banco de dados criando um novo objeto PDO. Para isso, use este tutorial.
Como a conexão ao banco de dados MySQL é um objeto PDO, você deve usar vários métodos PDO (qualquer função que seja parte de qualquer objeto) para preparar e fazer os pedidos. Os métodos de objetos são chamados assim:
$the_Object->the_Method();
O PDO permite que você prepare o código SQL antes dele ser executado. A SQL Query é avaliada e corrigida antes de ser executada. Um ataque de injeção de SQL simplificado poderia ser feito apenas escrevendo o código SQL em um campo de um formulário. Por exemplo:
// User writes this in the username field of a login form john"; DROP DATABASE user_table; // The final query becomes this "SELECT * FROM user_table WHERE username = john"; DROP DATABASE user_table;
Como existe um código de SQL sintaticamente correto, o ponto e vírgula faz do DROP DATABASE user_table uma nova SQL Query, e a sua tabela é apagada. Declarações preparadas não permitem os caracteres de aspas (“) e nem ponto e vírgula (;) no final da solicitação original e a instrução maliciosa DROP DATABASE nunca será executada.
Você sempre deve usar declarações preparadas quando enviar ou receber dados do banco de dados com PDO.
Para usar declarações preparadas, você deve escrever uma nova variante que chame o método prepare() do objeto do banco de dados.
No código correto:
<?php $servername = "mysql.hostinger.com"; $database = "u266072517_name"; $username = "u266072517_user"; $password = "buystuffpwd"; $sql = "mysql:host=$servername;dbname=$database;"; $dsn_Options = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]; // Create a new connection to the MySQL database using PDO, $my_Db_Connection is an object try { $my_Db_Connection = new PDO($sql, $username, $password, $dsn_Options); echo "Connected successfully"; } catch (PDOException $error) { echo 'Connection error: ' . $error->getMessage(); } // Set the variables for the person we want to add to the database $first_Name = "Thom"; $last_Name = "Vial"; $email = "thom.v@some.com"; // Here we create a variable that calls the prepare() method of the database object // The SQL query you want to run is entered as the parameter, and placeholders are written like this :placeholder_name $my_Insert_Statement = $my_Db_Connection->prepare("INSERT INTO Students (name, lastname, email) VALUES (:first_name, :last_name, :email)"); // Now we tell the script which variable each placeholder actually refers to using the bindParam() method // First parameter is the placeholder in the statement above - the second parameter is a variable that it should refer to $my_Insert_Statement->bindParam(':first_name', $first_Name); $my_Insert_Statement->bindParam(':last_name', $last_Name); $my_Insert_Statement->bindParam(':email', $email); // Execute the query using the data we just defined // The execute() method returns TRUE if it is successful and FALSE if it is not, allowing you to write your own messages here if ($my_Insert_Statement->execute()) { echo "New record created successfully"; } else { echo "Unable to create record"; } // At this point you can change the data of the variables and execute again to add more data to the database $first_Name = "John"; $last_Name = "Smith"; $email = "john.smith@email.com"; $my_Insert_Statement->execute(); // Execute again now that the variables have changed if ($my_Insert_Statement->execute()) { echo "New record created successfully"; } else { echo "Unable to create record"; }
Nas linhas 28, 29 e 30, nós usamos o método bindParam() do objeto do banco de dados. Também existe um método bindValue() que é bem diferente.
- bindParam() – Esse método avalia dados quando o método execute() é alcançado. A primeira vez que o script alcança um método execute() ele vê que o $first_Name corresponde ao “Thom”, vincula aquele valor e executa a consulta. Quando o script alcança o segundo método execute(), ele vê o $first_Name agora corresponde a “John”, vincula aquele valor e executa a consulta novamente com os novos valores. O que é importante de se lembrar é que nós definimos a consulta uma vez a reusamos com dados diferentes em diferentes pontos do script.
- bindValue() – Esse método avalia os dados assim que o bindValue() é alcançado. Como o valor do $first_Name foi definido como “Thom” quando o bindValue() foi alcançado, ele será usado toda vez que um método execute() for chamado para $my_Insert_Statement.
Perceba que nós usamos a variante $first_Name e demos a ela um outro valor na segunda vez. Se você conferir o banco de dados depois de executar o script, você terá ambos os nomes definidos, apesar da variável $first_Name ser equivalente a “John” ao final do script. Lembre-se que o PHP avalia o script inteiro antes de realmente executá-lo.
Se você atualizar o script e substituir bindParam com bindValue, você vai inserir “Thom Vail” duas vezes no banco de dados e “John Smith” será ignorado.
Como Confirmar o Sucesso da Operação e Resolver Erros Comuns
Se a solicitação que executamos e inserimos no banco de dados MySQL deu certo, você verá uma mensagem como a de baixo. Basicamente, ela diz que a conexão foi feita com sucesso e um novo registro foi criado também com sucesso. Em outras palavras, você conseguiu inserir dados MySQL PHP.
Connect Successfully New record created successfully
Como Resolver Erros Comuns
Contudo, existem situações onde o novo registro apresentará um erro com a inserção do SQL. Mas não se preocupe, existem algumas maneiras de corrigir esses erros de MySQL.
MySQLi
Em qualquer outro caso, uma imagem de erro vai aparecer. Por exemplo, vamos fazer um erro de sintaxe no nosso código e a mensagem que vai aparecer é algo bem parecido com a de baixo.
Connect successfully Error: INSERT INTO students {name, lastname, email} VALUES ('Test', 'Testing', 'Testing@testing.com') You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '{name, lastname, email} VALUES ('Test', 'Testing', 'Test@testingcom')' at line 1"
Como podemos ver, a primeira parte do nosso código está boa. A conexão foi estabelecida com sucesso, mas nossa SQL Query esbarrou num erro.
"Error: INSERT INTO Students {name, lastname, email} VALUES ('Thom', 'Vial', 'thom.v@some.com') You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '{name, lastname, email} VALUES ('Thom', 'Vial', 'thom.v@some.com')' at line 1"
Existe um erro de sintaxe que, infelizmente, fez o nosso script dar erro. O erro estava aqui:
$sql = "INSERT INTO Students {name, lastname, email} VALUES ('Thom', 'Vial', 'thom.v@some.com')";
Como você pode ver, nós usamos as chaves “{}” em vez dos colchetes “[]”. E isso não está correto, algo que fez nosso script aponta o erro e falhar a execução.
PDO
Na linha 7 da conexão PDO, o modo de erro está configurado para mostrar todas as exceções. Se isso tivesse deixado fora do script e a solicitação tivesse falhado, você não receberia nenhuma mensagem de erro. Com as exceções habilitadas, é o problema específico que aparece, aumentando suas chances de resolvê-lo.
Isso deve ser usado apenas quando estiver desenvolvendo um script, pois ele pode expor o banco de dados e os nomes das tabelas. Algo que você pode preferir esconder de qualquer tipo de tentativa maliciosa de acesso aos seus dados. Nesse caso acima em que as chaves foram usadas no lugar dos colchetes, o erro se parece com o código abaixo.
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; <code>check the manual that corresponds to your MySQL server version for the right syntax to use near '{name, lastname, email} VALUES ('Thom', 'Vial', 'thom.v@some.com')' at line 1"</code>
Outros possíveis problemas que você pode encontrar:
- Colunas especificadas incorretamente (colunas não-existentes ou com erros de ortografia).
- Um tipo de valor sendo atribuído a outro tipo de coluna. Por exemplo, se tentássemos atribuir o número “47” na coluna Name, vamos encontrar um erro pois deve ser um valor de sequência. Mas se for atribuído um número entre as aspas, por exemplo “47”, isso funcionaria porque nosso número funcionaria porque nosso número seria atribuído como uma string à coluna.
- Tentar inserir dados em uma tabela que não existe ou cometer erros de digitação.
Todos estes erros podem ser corrigidos facilmente se você seguir as instruções da mensagem de erro ou corrigir nsagens de erros.
Depois de adicionar dados de forma bem sucedida, devemos vê-los adicionados ao nosso banco de dados. Aqui está um exemplo de tabela e que adicionamos nossos dados vista do phpMyAdmin.
Conclusão
Neste tutorial, você aprendeu como inserir dados no MySQL com PHP usando MySQLi e PDO. Você também aprendeu a como solucionar problemas de comuns de conexão. Inserir dados no MySQL com PHP é extremamente útil para quem está aprendendo como codificar ou construir um site.
Comentários
outubro 11 2019
O conteúdo é muito bom, mas seria muito útil uma descrição de onde colocar o script PHP. Não sei se existe um padrão para isso, mas a definição do diretório raiz e a estrutura adequada para os scripts seria de grande ajuda para quem está começando.
outubro 14 2019
Então Ricardo, nós temos esse tutorial aqui que explica certinho onde colocar o script PHP: https://www.hostinger.com.br/tutoriais/como-usar-php-para-wordpress/ :D
outubro 31 2019
gostei do conteúdo, mais estou com uma duvida como faço para inserir dados numa tabela que tem relacionamento um para muito. exemplo tenho uma tabela paciente e uma telefone, a chave do paciente vai para tabela paciente, como faço a inserção a partir de um formulário?
novembro 05 2019
Oi Jose, pelo o que eu entendi você quer criar um subformulário? Se for isso, você deve usar a ferramenta de subformulário. Aqui tem um tutorial sobre como fazer isso no Microsoft Access :)
junho 23 2023
Eu estou com um problema que o código faz a conexão mas não consegue executar o my_insert_startrment e toda vez q tenta executar a página desliga.
julho 05 2023
Oi, Misael! Se você for cliente Hostinger, entra em contato com nossa equipe de Sucesso do CLiente que eles podem te ajudar! https://www.hostinger.com.br/contatos