W3docs

Comment récupérer le dernier ID inséré en PHP et MySQL

Apprenez à récupérer le dernier ID inséré en PHP et MySQL avec MySQLi et PDO, avec des exemples pratiques et les erreurs courantes à éviter.

Lorsque vous insérez une ligne dans une table MySQL dont la clé primaire est une colonne AUTO_INCREMENT, la base de données génère le nouvel ID à votre place. PHP vous permet de lire cet ID immédiatement après l'insertion, sans exécuter une seconde requête SELECT. Cette page montre comment procéder avec les extensions MySQLi et PDO, pourquoi la valeur est fiable, et les pièges à éviter.

Le dernier ID inséré est le plus souvent utilisé pour relier des enregistrements associés : insérer un nouvel user, récupérer son ID, puis insérer des lignes dans orders ou profiles qui y font référence en tant que clé étrangère.

Fonctionnement

Les deux fonctions décrites ci-dessous renvoient l'ID généré par le plus récent INSERT réussi sur la connexion de base de données en cours :

  • mysqli_insert_id($conn) — MySQLi (procédural ou orienté objet).
  • PDO::lastInsertId() — PDO.

Deux détails importants :

  • La valeur est par connexion. Même si d'autres utilisateurs insèrent des lignes en même temps, vous obtenez toujours l'ID généré par votre connexion, il n'y a donc pas de condition de concurrence.
  • Elle ne renvoie une valeur non nulle que lorsque la table insérée possède une colonne AUTO_INCREMENT. Si la table ne possède pas de clé auto-incrémentée, vous obtenez 0.

Prérequis

Avant de commencer, quelques prérequis doivent être en place :

  • Un serveur web avec PHP installé
  • Une base de données MySQL
  • L'accès à l'interface phpMyAdmin ou à un outil de gestion de base de données similaire
  • Une table avec une clé primaire AUTO_INCREMENT. Les exemples ci-dessous supposent celle-ci :
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    email VARCHAR(100)
);

Consultez Créer une table MySQL pour plus d'informations sur la définition des tables.

Établir une connexion

La première étape pour récupérer le dernier ID inséré consiste à établir une connexion à la base de données. Avec MySQLi, cela se fait via la fonction mysqli_connect(), qui requiert les paramètres suivants :

  • Le nom du serveur de base de données
  • Le nom d'utilisateur utilisé pour accéder à la base de données
  • Le mot de passe de l'utilisateur de la base de données
  • Le nom de la base de données à laquelle se connecter

Voici un exemple de connexion à une base de données :

<?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";
?>

Pour une présentation plus approfondie de la connexion, consultez Se connecter à une base de données MySQL.

Rédiger l'instruction SQL

Une fois la connexion à la base de données établie, l'étape suivante consiste à rédiger l'instruction SQL qui sera utilisée pour insérer les données dans la base de données.

Voici un exemple d'instruction SQL qui insère des données dans une table de base de données :

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

Exécuter l'instruction SQL

Une fois l'instruction SQL rédigée, l'étape suivante consiste à l'exécuter. Cela se fait via la fonction mysqli_query(), qui requiert les paramètres suivants :

  • La connexion à la base de données
  • L'instruction SQL à exécuter

Voici un exemple d'exécution de l'instruction 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);
}
?>

Note de sécurité : Dans les environnements de production, utilisez toujours des instructions préparées pour prévenir les attaques par injection SQL.

Récupérer le dernier ID inséré

Une fois les données insérées dans la base de données, l'étape suivante consiste à récupérer l'ID du dernier enregistrement inséré. Cela se fait via la fonction mysqli_insert_id(), qui requiert le paramètre suivant :

  • La connexion à la base de données

Voici un exemple de récupération du dernier ID inséré :

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

Fermer la connexion

Une fois le dernier ID inséré récupéré, il est important de fermer la connexion à la base de données pour éviter tout risque de sécurité. Cela se fait via la fonction mysqli_close(), qui requiert le paramètre suivant :

  • La connexion à la base de données

Voici un exemple de fermeture de la connexion à la base de données :

<?php
mysqli_close($conn);
?>

Exemple complet (MySQLi, instruction préparée)

Dans un vrai code, vous devriez passer les données utilisateur via une instruction préparée plutôt que de les concaténer dans la chaîne SQL. Le principe est identique : exécuter l'insertion, puis lire l'ID. Voici tout assemblé :

<?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);
?>

Après la réussite de l'insertion, $last_id contient la valeur que MySQL a générée pour la colonne id — par exemple 1 lors de la première insertion, 2 lors de la suivante, et ainsi de suite.

Obtenir le dernier ID avec PDO

Si vous vous connectez avec PDO au lieu de MySQLi, utilisez la méthode lastInsertId() sur l'objet de connexion :

<?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;
?>

Notez que PDO::lastInsertId() renvoie l'ID sous forme de string, donc utilisez un cast (int) si vous avez besoin d'un type numérique.

Erreurs courantes

  • Appelez-la juste après l'insertion. Exécutez mysqli_insert_id() / lastInsertId() avant d'exécuter toute autre requête sur la même connexion — un INSERT ultérieur écrase la valeur stockée.
  • Pas de colonne auto-incrémentée → 0. La fonction renvoie 0 (pas une erreur) lorsque la table dans laquelle vous avez inséré n'a pas de colonne AUTO_INCREMENT.
  • UPDATE et DELETE ne la modifient pas. Seules les instructions INSERT qui créent une valeur auto-incrémentée mettent à jour le résultat.
  • N'utilisez pas SELECT MAX(id). Une erreur fréquente consiste à lire l'ID le plus élevé avec SELECT MAX(id) FROM users. Lors d'insertions simultanées, cela peut renvoyer la ligne d'un autre utilisateur. Les fonctions dédiées sont limitées à la connexion et sans risque de concurrence.

Conclusion

Dans cet article, nous vous avons montré comment récupérer le dernier ID inséré en PHP et MySQL. En suivant ces étapes, vous devriez être en mesure de récupérer l'ID du dernier enregistrement inséré dans votre base de données. Pour de meilleurs résultats, insérez toujours les données via des instructions préparées et lisez l'ID sur la même connexion immédiatement après l'insertion.

Chapitres associés : Insérer des données dans MySQL, Instructions préparées et Sélectionner des données depuis MySQL.

Pratique

Pratique
Quelles méthodes peuvent être utilisées pour obtenir le dernier ID inséré en PHP et MySQL ?
Quelles méthodes peuvent être utilisées pour obtenir le dernier ID inséré en PHP et MySQL ?
Was this page helpful?