W3docs

Como Obter o Último ID Inserido em PHP e MySQL

Aprenda a recuperar o último ID inserido em PHP e MySQL usando MySQLi e PDO, com exemplos práticos e dicas importantes de segurança.

Quando você insere uma linha em uma tabela MySQL cuja chave primária é uma coluna AUTO_INCREMENT, o banco de dados gera o novo ID automaticamente. O PHP oferece uma maneira de ler esse ID imediatamente após a inserção, sem precisar executar uma segunda consulta SELECT. Esta página mostra como fazer isso com as extensões MySQLi e PDO, por que o valor é confiável e os erros comuns a evitar.

O último ID inserido é usado com mais frequência para vincular registros relacionados: inserir um novo user, obter seu ID e, em seguida, inserir linhas em orders ou profiles que o referenciam como chave estrangeira.

Como funciona

Ambas as funções descritas abaixo retornam o ID gerado pelo INSERT bem-sucedido mais recente na conexão atual com o banco de dados:

  • mysqli_insert_id($conn) — MySQLi (procedural ou orientado a objetos).
  • PDO::lastInsertId() — PDO.

Dois detalhes importantes:

  • O valor é por conexão. Mesmo que outros usuários insiram linhas ao mesmo tempo, você sempre obtém o ID gerado pela sua conexão, portanto não há condição de corrida.
  • Ele só retorna um valor diferente de zero quando a tabela inserida tem uma coluna AUTO_INCREMENT. Se a tabela não tiver chave de incremento automático, você obtém 0.

Pré-requisitos

Antes de começar, há alguns pré-requisitos que você deve ter:

  • Um servidor web com PHP instalado
  • Um banco de dados MySQL
  • Acesso à interface phpMyAdmin ou ferramenta similar de gerenciamento de banco de dados
  • Uma tabela com chave primária AUTO_INCREMENT. Os exemplos abaixo assumem esta:
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    email VARCHAR(100)
);

Consulte Criar uma Tabela MySQL para saber mais sobre como definir tabelas.

Estabelecendo uma Conexão

O primeiro passo para recuperar o último ID inserido é estabelecer uma conexão com o banco de dados. Com MySQLi isso é feito usando a função mysqli_connect(), que requer os seguintes parâmetros:

  • O nome do servidor de banco de dados
  • O nome de usuário usado para acessar o banco de dados
  • A senha do usuário do banco de dados
  • O nome do banco de dados ao qual se conectar

Aqui está um exemplo de como estabelecer uma conexão com um banco de dados:

<?php
$server = "localhost";
$username = "root";
$password = "password";
$database = "database_name";

$conn = mysqli_connect($server, $username, $password, $database);

if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>

Para uma visão mais aprofundada sobre conexão, consulte Conectar a um Banco de Dados MySQL.

Escrevendo a Instrução SQL

Depois que uma conexão com o banco de dados for estabelecida, o próximo passo é escrever a instrução SQL que será usada para inserir os dados no banco de dados.

Aqui está um exemplo de instrução SQL que insere dados em uma tabela do banco de dados:

INSERT INTO table_name (column1, column2, column3)
VALUES ('value1', 'value2', 'value3');

Executando a Instrução SQL

Depois que a instrução SQL for escrita, o próximo passo é executá-la. Isso é feito usando a função mysqli_query(), que requer os seguintes parâmetros:

  • A conexão com o banco de dados
  • A instrução SQL a ser executada

Aqui está um exemplo de como executar a instrução SQL:

<?php
$sql = "INSERT INTO table_name (column1, column2, column3)
VALUES ('value1', 'value2', 'value3')";

if (mysqli_query($conn, $sql)) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
?>

Nota de Segurança: Em ambientes de produção, sempre use prepared statements para prevenir ataques de SQL injection.

Recuperando o Último ID Inserido

Depois que os dados forem inseridos no banco de dados, o próximo passo é recuperar o ID do último registro inserido. Isso é feito usando a função mysqli_insert_id(), que requer o seguinte parâmetro:

  • A conexão com o banco de dados

Aqui está um exemplo de como recuperar o último ID inserido:

<?php
$last_id = mysqli_insert_id($conn);
echo "Last inserted ID is: " . $last_id;
?>

Fechando a Conexão

Depois que o último ID inserido for recuperado, é importante fechar a conexão com o banco de dados para evitar riscos de segurança. Isso é feito usando a função mysqli_close(), que requer o seguinte parâmetro:

  • A conexão com o banco de dados

Aqui está um exemplo de como fechar a conexão com o banco de dados:

<?php
mysqli_close($conn);
?>

Exemplo completo (MySQLi, prepared statement)

No código real, você deve passar dados do usuário através de um prepared statement em vez de concatená-los na string SQL. O padrão é idêntico: execute a inserção e, em seguida, leia o ID. Aqui tudo está reunido:

<?php
$conn = mysqli_connect("localhost", "root", "password", "database_name");
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

$stmt = mysqli_prepare($conn, "INSERT INTO users (name, email) VALUES (?, ?)");
mysqli_stmt_bind_param($stmt, "ss", $name, $email);

$name = "Jane Doe";
$email = "[email protected]";
mysqli_stmt_execute($stmt);

$last_id = mysqli_insert_id($conn);
echo "New user inserted with ID: " . $last_id;

mysqli_stmt_close($stmt);
mysqli_close($conn);
?>

Após a inserção ser bem-sucedida, $last_id contém o valor que o MySQL gerou para a coluna id — por exemplo 1 na primeira inserção, 2 na próxima e assim por diante.

Obtendo o último ID com PDO

Se você se conectar com PDO em vez de MySQLi, use o método lastInsertId() no objeto de conexão:

<?php
$pdo = new PDO("mysql:host=localhost;dbname=database_name", "root", "password");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->execute(["John Doe", "[email protected]"]);

$last_id = $pdo->lastInsertId();
echo "New user inserted with ID: " . $last_id;
?>

Note que PDO::lastInsertId() retorna o ID como uma string, portanto use cast com (int) se precisar de um tipo numérico.

Erros comuns

  • Chame logo após a inserção. Execute mysqli_insert_id() / lastInsertId() antes de executar qualquer outra consulta na mesma conexão — um INSERT posterior substitui o valor armazenado.
  • Sem coluna auto-increment → 0. A função retorna 0 (não um erro) quando a tabela na qual você inseriu não tem coluna AUTO_INCREMENT.
  • UPDATE e DELETE não alteram o valor. Apenas instruções INSERT que criam um valor de incremento automático atualizam o resultado.
  • Não use SELECT MAX(id). Um erro comum é ler o ID mais alto com SELECT MAX(id) FROM users. Em inserções simultâneas, isso pode retornar a linha de outro usuário. As funções dedicadas têm escopo de conexão e são seguras.

Conclusão

Neste artigo, mostramos como recuperar o último ID inserido em PHP e MySQL. Seguindo esses passos, você deverá ser capaz de recuperar o ID do último registro inserido em seu banco de dados. Para melhores resultados, sempre insira dados através de prepared statements e leia o ID na mesma conexão imediatamente após a inserção.

Capítulos relacionados: Inserir Dados no MySQL, Prepared Statements e Selecionar Dados do MySQL.

Practice

Prática
Quais métodos podem ser usados para obter o último ID inserido em PHP e MySQL?
Quais métodos podem ser usados para obter o último ID inserido em PHP e MySQL?
Was this page helpful?