PHP MySQL – Como obter o último ID inserido

Freqüentemente, é necessário recuperar o registro PHP MySQL Last Inserted ID em um banco de dados, ao inserir novos registros no banco de dados usando PHP.

Você pode utilizar este ID como referência em outras tabelas ou operações que fazem parte da aplicação para facilitar seu trabalho.

Ao longo deste artigo, exploraremos uma solução PHP para recuperar o último ID inserido em um banco de dados MySQL usando a extensão PDO para recuperar o ID desse banco de dados.

Também vamos destacar algumas práticas recomendadas que podem ser aplicadas ao trabalhar com geração e recuperação de ID em bancos de dados MySQL para evitar armadilhas comuns.



PHP MySQL último ID inserido

Uma operação INSERT ou UPDATE em uma tabela, que possui um campo AUTO_INCREMENT , nos permitirá obter o ID do último registro que foi inserido ou atualizado imediatamente após a realização da operação.

A coluna “ id ” na tabela “ Users ” é um campo que é um campo AUTO_INCREMENT.

CREATE TABLE Users (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
age INT,
gender VARCHAR(50),
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)

Como nos exemplos da página anterior (PHP Insert Data Into MySQL), os exemplos a seguir são idênticos aos da página anterior, exceto que adicionamos uma única linha de código para recuperar o ID do registro anterior que foi inserido.

Nosso código também ecoa o último ID inserido.

Abaixo está um exemplo usando o método Orientado a Objetos do MySQLi:

Example (MySQLi’s Object-Oriented): 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
$servername = "localhost";
$username = "my_user";
$password = "my_pass";
$dbname = "mrx_test_db";
// Creating connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Checking connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO Users (firstname, lastname, email, age, gender)
VALUES (Matt, 'LeBlanc', '[email protected]', 55, 'Male')";
//Inserting data into Users
if ($conn->query($sql) === TRUE) {
$last_id = $conn->insert_id;
echo "New record added successfully.
Last inserted ID is: " . $last_id;
} else {
echo "Error: " . $sql . " " . $conn->error;
}
$conn->close();
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Abaixo está um exemplo usando o método Processual do MySQLi:

Example (MySQLi’s Procedural): 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
$servername = "localhost";
$username = "my_user";
$password = "my_pass";
$dbname = "mrx_test_db";
// Creating connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Checking connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$sql = "INSERT INTO Users (firstname, lastname, email, age, gender)
VALUES (Matt, 'LeBlanc', '[email protected]', 55, 'Male')";
if (mysqli_query($conn, $sql)) {
$last_id = mysqli_insert_id($conn);
echo "New record added successfully. Last inserted ID is: " . $last_id;
} else {
echo "Error: " . $sql . " " . mysqli_error($conn);
}
mysqli_close($conn);
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Abaixo está um exemplo usando o método MySQL PDO(PHP Data Objects):

Example (PDO): 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
$servername = "localhost";
$username = "my_user";
$password = "my_pass";
$dbname = "mrx_test_db";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// Specify the exception error mode in the PDO
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO Users (firstname, lastname, email, age, gender)
VALUES (Matt, 'LeBlanc', '[email protected]', 55, 'Male')";
// Due to the fact that no results are returned, use exec() instead
$conn->exec($sql);
$last_id = $conn->lastInsertId();
echo "New record added successfully. Last inserted ID is: " . $last_id;
}
catch (PDOException $e) {
echo $sql . " " . $e->getMessage();
}
$conn = null;
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Exemplo de Explicação

O exemplo acima demonstra como recuperar o último ID inserido em um banco de dados MySQL usando PDO após inserir um novo registro.
Aqui está uma explicação passo a passo do que fizemos:
  1. O código começa definindo as variáveis ​​$servername , $username , $password e $dbname , que são usadas para especificar os detalhes da conexão do banco de dados.
  2. Um bloco try-catch é usado para lidar com quaisquer exceções que possam ocorrer durante a conexão com o banco de dados e a execução da consulta. Dentro do bloco try, o construtor PDO é usado para criar uma nova conexão com o banco de dados. A string de conexão é criada combinando as variáveis ​​servername, dbname, username e password.
  3. O método PDO::setAttribute() é chamado no objeto $conn para definir o modo de erro como ERRMODE_EXCEPTION , o que significa que o PDO lançará uma exceção se ocorrer um erro.
  4. Uma instrução SQL INSERT é definida na variável $sql . A instrução insere um novo registro na tabela “ Users ” com os valores ' Matt ' para primeiro nome, ' LeBlanc ' para sobrenome, ' [email protected] ' para email, 55 para idade e ' Masculino ' para gênero.
  5. O método $conn->exec() é chamado para executar a instrução INSERT . Como a instrução não retorna nenhum resultado, o método exec() é usado em vez de query() .
  6. O método $conn->lastInsertId() é chamado para recuperar o ID do último registro inserido.
  7. O ID é armazenado na variável $last_id .
  8. Se a instrução INSERT for executada com sucesso, a mensagem “Novo registro adicionado com sucesso. O último ID inserido é: ” é exibido junto com o valor de $last_id.
  9. Se uma exceção for capturada, o bloco catch é executado. O bloco catch exibe uma mensagem de erro que inclui a consulta SQL e a mensagem de erro retornada pelo PDO.
  10. Por fim, a variável $conn é definida como nula para fechar a conexão com o banco de dados .
Nós valorizamos o seu feedback.
+1
0
+1
1
+1
0
+1
0
+1
0
+1
0
+1
0

Assine a nossa newsletter
Digite seu e-mail para receber um resumo semanal de nossos melhores posts. Saber mais!
ícone