Como Inserir Dados em um Banco de Dados MySQL usando PHP
Aprenda a inserir dados em um banco de dados MySQL usando PHP com mysqli, instruções preparadas e boas práticas de segurança.
Inserir dados é a forma como uma aplicação PHP escreve em um banco de dados MySQL — salvando um novo usuário, registrando um pedido ou gravando um comentário. Cada uma dessas escritas é uma instrução SQL INSERT INTO que o PHP envia por uma conexão de banco de dados aberta. Este artigo percorre o fluxo completo com a extensão mysqli, e depois apresenta a forma mais segura e moderna usando prepared statements, que você deve usar em projetos reais.
O que você aprenderá
- Como abrir uma conexão e executar um
INSERTbásico - Por que concatenar valores em SQL é perigoso e como as prepared statements resolvem isso
- Como recuperar o ID gerado automaticamente da linha que você acabou de inserir
- Como inserir várias linhas de forma eficiente
Pré-requisitos
Antes de começar, você deve ter:
- Um servidor web com PHP (7.4+) e a extensão
mysqliinstalada - Um banco de dados MySQL (ou MariaDB) em execução
- Uma ferramenta de gerenciamento de banco de dados como phpMyAdmin, ou acesso pela linha de comando
Estes exemplos pressupõem uma tabela users. Você pode criá-la com:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
email VARCHAR(100)
);Se você é novo na criação de tabelas, consulte Criar uma Tabela MySQL.
Passo 1: Estabelecer uma Conexão
O primeiro passo é conectar-se ao banco de dados com mysqli_connect(), que recebe quatro argumentos: o host do servidor, o nome de usuário, a senha e o nome do banco de dados. Ela retorna um objeto de conexão que você reutiliza em cada consulta.
<?php
$server = "localhost";
$username = "root";
$password = "password";
$database = "database_name";
$conn = mysqli_connect($server, $username, $password, $database);
// Always check the connection before continuing.
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>mysqli_connect_error() retorna uma mensagem legível quando a conexão falha — senha incorreta, host inacessível ou banco de dados inexistente — para que você não fique sem saber o motivo.
Passo 2: Executar um INSERT Básico
Com a conexão pronta, você pode executar uma consulta INSERT usando mysqli_query(). Ela recebe a conexão e a string SQL, e retorna true em caso de sucesso ou false em caso de falha.
<?php
$sql = "INSERT INTO users (first_name, last_name, email)
VALUES ('John', 'Doe', '[email protected]')";
if (mysqli_query($conn, $sql)) {
echo "New record created successfully";
} else {
echo "Error: " . mysqli_error($conn);
}
?>Isso funciona para valores fixos, mas assim que qualquer parte da consulta vier de entrada do usuário, torna-se inseguro. Um valor como O'Reilly (com apóstrofo) quebra o SQL, e um valor malicioso pode reescrever toda a sua consulta — isso é SQL injection. Nunca construa consultas concatenando entradas de usuário em uma string.
Passo 3: Inserir com Segurança usando Prepared Statements
Uma prepared statement envia o esqueleto SQL e os dados separadamente. Marcadores de posição (?) indicam onde os valores serão inseridos, e mysqli_stmt_bind_param() vincula cada valor com seu tipo (s para string, i para inteiro, d para double, b para blob). O MySQL trata os valores vinculados estritamente como dados, tornando a injeção impossível e a gestão de aspas automática.
<?php
// 1. Prepare the statement with placeholders.
$stmt = mysqli_prepare(
$conn,
"INSERT INTO users (first_name, last_name, email) VALUES (?, ?, ?)"
);
// 2. Bind the input values: three strings -> "sss".
$first_name = "Jane";
$last_name = "Smith";
$email = "[email protected]";
mysqli_stmt_bind_param($stmt, "sss", $first_name, $last_name, $email);
// 3. Execute, then clean up.
if (mysqli_stmt_execute($stmt)) {
echo "New record created successfully";
} else {
echo "Error: " . mysqli_stmt_error($stmt);
}
mysqli_stmt_close($stmt);
?>Esta é a abordagem que você deve usar em qualquer aplicação real. Para uma análise mais profunda, consulte PHP MySQL Prepared Statements.
Obtendo o ID Inserido
Quando uma tabela possui uma chave primária AUTO_INCREMENT, o MySQL atribui o id da nova linha automaticamente. Recupere-o com mysqli_insert_id() — útil quando você precisa do ID para uma consulta subsequente ou para retorná-lo ao usuário.
<?php
mysqli_query($conn, "INSERT INTO users (first_name, last_name, email)
VALUES ('Amy', 'Lee', '[email protected]')");
$new_id = mysqli_insert_id($conn);
echo "Inserted row has ID: " . $new_id;
?>Consulte Obter o Último ID Inserido para uma visão completa, incluindo como se comporta com prepared statements.
Inserindo Várias Linhas
Para adicionar várias linhas de uma vez, liste múltiplos conjuntos de valores em uma única instrução. Uma única viagem ao banco de dados é muito mais rápida do que executar INSERT em um loop.
<?php
$sql = "INSERT INTO users (first_name, last_name, email) VALUES
('John', 'Doe', '[email protected]'),
('Jane', 'Smith', '[email protected]'),
('Amy', 'Lee', '[email protected]')";
if (mysqli_query($conn, $sql)) {
echo mysqli_affected_rows($conn) . " records inserted";
} else {
echo "Error: " . mysqli_error($conn);
}
?>Para inserir dados fornecidos pelo usuário em massa, vincule os valores dentro de um loop em uma prepared statement — consulte Inserir Várias Linhas.
Passo 4: Fechar a Conexão
Quando terminar, feche a conexão com mysqli_close() para liberar recursos. O PHP fecha as conexões automaticamente no final de uma requisição, mas fechar explicitamente é uma boa prática em scripts de longa duração.
<?php
mysqli_close($conn);
?>Erros Comuns
- Esquecer de verificar o resultado.
mysqli_query()retornafalseem caso de erro; sempre inspecionemysqli_error()para que uma falha silenciosa não pareça um sucesso. - Apóstrofos sem escape. Nomes como
O'Brienquebram uma consulta construída por string. As prepared statements eliminam completamente esse problema. - Número de colunas diferente. O número de colunas deve corresponder ao número de valores, ou o MySQL rejeita a instrução.
- Tipo de bind incorreto. Vincular um inteiro como
"s"geralmente funciona, mas incompatibilidades (por exemplo, vincular uma string a uma colunai) podem corromper dados silenciosamente.
Conclusão
Agora você sabe como inserir dados no MySQL a partir do PHP: abrir uma conexão, executar um INSERT e fechar a conexão. Para qualquer coisa além de valores de teste fixos, use prepared statements para se proteger de SQL injection. Em seguida, aprenda a recuperar seus dados com Selecionar Dados.