oujood.com

Comment utiliser la fonction insert_id() en PHP pour récupérer l'identifiant auto-incrémenté d'une ligne insérée

Cet article explique comment utiliser cette fonction, avec des exemples en PHP procédural et orienté objet.

Définition et utilisation de la fonction insert_id()/mysqli_insert_id() en PHP

La fonction insert_id() ou mysqli_insert_id() permet de récupérer l'identifiant auto-incrémenté d'une ligne insérée dans une table MySQL.

Fonction insert_id()

La fonction insert_id() est disponible dans tous les scripts PHP. Elle retourne l'identifiant auto-incrémenté de la dernière ligne insérée dans une table MySQL.

Fonction mysqli_insert_id()

comme la fonction insert_id(), la fonction mysqli_insert_id() est disponible dans les scripts PHP qui utilisent l'extension mysqli. Elle retourne également l'identifiant auto-incrémenté de la dernière ligne insérée dans une table MySQL.

Syntaxe orientée objet

En PHP orienté objet, la fonction insert_id() est accessible via l'objet mysqli. La syntaxe est la suivante :

// Récupérer l'identifiant auto-incrémenté
$id = $mysqli->insert_id;

Syntaxe procédurale

En PHP procédural, la fonction mysqli_insert_id() est accessible via la fonction mysqli_insert_id(). La syntaxe est la suivante :

// Récupérer l'identifiant auto-incrémenté
$id = mysqli_insert_id($mysqli);

Valeurs possibles et paramètres

La fonction insert_id() retourne une valeur entière. Si aucune ligne n'a été insérée, la fonction retourne la valeur 0.

La fonction insert_id() ne prend aucun paramètre.

Exemples pratiques

Exemple orienté objet

Exemple :       Copier le code

<?php
// Connexion à la base de données
$mysqli = new mysqli('seveur', 'utilisateur, 'motDePasse', 'ma_base_de_données');

// Vérification de la connexion
if ($mysqli->connect_error) {
die('Erreur de connexion : ' . $mysqli->connect_error);
}

// INSERT
$query = 'INSERT INTO `users` (`name`, `age`) VALUES ("John Doe", 30);';
$mysqli->query($query);

// Récupérer l'identifiant auto-incrémenté
$id = $mysqli->insert_id;

// Affichage de l'identifiant
echo $id;
?>

Exemple procédural

Exemple :       Copier le code

<?php
// Connexion à la base de données
$mysqli = mysqli_connect('seveur', 'utilisateur, 'motDePasse', 'ma_base_de_données');

// Vérification de la connexion
if (mysqli_connect_errno()) {
die('Erreur de connexion : ' . mysqli_connect_error());
}

// INSERT
$query = 'INSERT INTO `users` (`name`, `age`) VALUES ("John Doe", 30);';
mysqli_query($mysqli, $query);

// Récupérer l'identifiant auto-incrémenté
$id = mysqli_insert_id($mysqli);

// Affichage de l'identifiant
echo $id;
?>

Cas d'utilisation pratiques

Voici quelques cas d'utilisation de la fonction insert_id(), avec des exemples dans les deux approches (orientée objet et procédurale) :

Cas d'utilisation 1

Insérer un nouvel utilisateur dans une table "users" et récupérer son ID auto-incrémenté.

Approche Orientée Objet :

Exemple :       Copier le code

<?php
// Connexion à la base de données
$mysqli = new mysqli('seveur', 'utilisateur, 'motDePasse', 'ma_base_de_données');

// Vérification de la connexion
if ($mysqli->connect_error) {
die('Erreur de connexion : ' . $mysqli->connect_error);
}

// INSERT un nouvel utilisateur
$query = 'INSERT INTO `users` (`name`, `age`) VALUES ("John Doe", 30);';
$mysqli->query($query);

// Récupérer l'identifiant auto-incrémenté de l'utilisateur ajouté
$id = $mysqli->insert_id;

// Affichage de l'identifiant
echo "L'identifiant de l'utilisateur ajouté est : " . $id;
?>

Approche Procédurale :

Exemple :       Copier le code

<?php
// Connexion à la base de données
$mysqli = mysqli_connect('seveur', 'utilisateur, 'motDePasse', 'ma_base_de_données');

// Vérification de la connexion
if (mysqli_connect_errno()) {
die('Erreur de connexion : ' . mysqli_connect_error());
}

// INSERT un nouvel utilisateur
$query = 'INSERT INTO `users` (`name`, `age`) VALUES ("John Doe", 30);';
mysqli_query($mysqli, $query);

// Récupérer l'identifiant auto-incrémenté de l'utilisateur ajouté
$id = mysqli_insert_id($mysqli);

// Affichage de l'identifiant
echo "L'identifiant de l'utilisateur ajouté est : " . $id;
?>

Cas d'utilisation 2

Gérer une table de commandes avec des ID auto-incrémentés.

Approche Orientée Objet :

Exemple :       Copier le code

<?php
// Connexion à la base de données
$mysqli = new mysqli('seveur', 'utilisateur, 'motDePasse', 'ma_base_de_données');

// Vérification de la connexion
if ($mysqli->connect_error) {
die('Erreur de connexion : ' . $mysqli->connect_error);
}

// INSERT une nouvelle commande
$query = 'INSERT INTO `orders` (`customer_id`, `total_amount`) VALUES (1, 100);';
$mysqli->query($query);

// Récupérer l'identifiant auto-incrémenté de la commande ajoutée
$id = $mysqli->insert_id;

// Affichage de l'identifiant
echo "L'identifiant de la commande ajoutée est : " . $id;
?>

Approche Procédurale :

Exemple :       Copier le code

<?php
// Connexion à la base de données
$mysqli = mysqli_connect('seveur', 'utilisateur, 'motDePasse', 'ma_base_de_données');

// Vérification de la connexion
if (mysqli_connect_errno()) {
die('Erreur de connexion : ' . mysqli_connect_error());
}

// INSERT une nouvelle commande
$query = 'INSERT INTO `orders` (`customer_id`, `total_amount`) VALUES (1, 100);';
mysqli_query($mysqli, $query);

// Récupérer l'identifiant auto-incrémenté de la commande ajoutée
$id = mysqli_insert_id($mysqli);

// Affichage de l'identifiant
echo "L'identifiant de la commande ajoutée est : " . $id;
?>

Génération d'un ID unique pour un nouvel enregistrement

La fonction insert_id() peut être utilisée pour générer un ID unique pour un nouvel enregistrement. Par exemple, si vous avez une table de produits avec une colonne id de type INT ayant l'attribut AUTO_INCREMENT, vous pouvez utiliser la fonction insert_id() pour générer un ID unique pour un nouveau produit que vous insérez dans la table.

Exemple orienté objet

Exemple :       Copier le code

<?php
// Connexion à la base de données
$mysqli = new mysqli('seveur', 'utilisateur, 'motDePasse', 'ma_base_de_données');

// Vérification de la connexion
if ($mysqli->connect_error) {
die('Erreur de connexion : ' . $mysqli->connect_error);
}

// INSERT
$query = 'INSERT INTO `products` (`name`, `price`) VALUES ("Product 1", 100);';
$mysqli->query($query);

// Récupérer l'identifiant auto-incrémenté
$id = $mysqli->insert_id;

// Affichage de l'identifiant
echo $id;
?>

Utilisez le code avec précaution. En savoir plus

Exemple procédural

Exemple :       Copier le code

<?php
// Connexion à la base de données
$mysqli = mysqli_connect('seveur', 'utilisateur, 'motDePasse', 'ma_base_de_données');

// Vérification de la connexion
if (mysqli_connect_errno()) {
die('Erreur de connexion : ' . mysqli_connect_error());
}

// INSERT
$query = 'INSERT INTO `products` (`name`, `price`) VALUES ("Product 1", 100);';
mysqli_query($mysqli, $query);

// Récupérer l'identifiant auto-incrémenté
$id = mysqli_insert_id($mysqli);

// Affichage de l'identifiant
echo $id;
?>

Utilisez le code avec précaution. En savoir plus

Création d'une relation parent-enfant

La fonction insert_id() peut également être utilisée pour créer une relation parent-enfant entre deux tables. Par exemple, si vous avez une table de parents avec une colonne id de type INT ayant l'attribut AUTO_INCREMENT, et une table d'enfants avec une colonne parent_id de type INT, vous pouvez utiliser la fonction insert_id() pour récupérer l'ID du parent nouvellement créé et le placer dans la colonne parent_id de l'enfant.

Exemple orienté objet

Exemple :       Copier le code

<?php
// Connexion à la base de données
$mysqli = new mysqli('seveur', 'utilisateur, 'motDePasse', 'ma_base_de_données');

// Vérification de la connexion
if ($mysqli->connect_error) {
die('Erreur de connexion : ' . $mysqli->connect_error);
}

// INSERT
$query = 'INSERT INTO `parents` (`name`) VALUES ("Parent 1");';
$mysqli->query($query);

// Récupérer l'identifiant auto-incrémenté
$parent_id = $mysqli->insert_id;

// INSERT
$query = 'INSERT INTO `children` (`name`, `parent_id`) VALUES ("Child 1", ' . $parent_id . ');';
$mysqli->query($query);
?>

Utilisez le code avec précaution.

Exemple procédural

Exemple :       Copier le code

<?php
// Connexion à la base de données
$mysqli = mysqli_connect('seveur', 'utilisateur, 'motDePasse', 'ma_base_de_données');

// Vérification de la connexion
if (mysqli_connect_errno()) {
die('Erreur de connexion : ' . mysqli_connect_error());
}

// INSERT
$query = 'INSERT INTO `parents` (`name`) VALUES ("Parent 1");';
mysqli_query($mysqli, $query);

// Récupérer l'identifiant auto-incrémenté
$parent_id = mysqli_insert_id($mysqli);

// INSERT
$query = 'INSERT INTO `children` (`name`, `parent_id`) VALUES ("Child 1", ' . $parent_id . ');';
mysqli_query($mysqli, $query);
?>

Utilisez le code avec précaution.

Ces exemples illustrent deux cas courants d'utilisation de la récupération de l'identifiant auto-incrémenté, l'un pour l'ajout d'un nouvel utilisateur et l'autre pour l'ajout d'une nouvelle commande dans une base de données. Les deux approches, orientée objet et procédurale, permettent d'accomplir la même tâche de manière équivalente.

Astuces et conseils d'utilisation pratique

  • La fonction insert_id() doit être appelée immédiatement après l'instruction INSERT ou UPDATE qui a généré l'identifiant auto-incrémenté.
  • La fonction insert_id() ne doit pas être appelée si aucune ligne n'a été insérée.
  • La fonction insert_id() ne peut être utilisée que pour les colonnes de type INT ou BIGINT ayant l'attribut AUTO_INCREMENT.



Voir aussi nos tutoriel :

fonction number_format

Formate un nombre pour l'affichage

 Indique si une variable est un scalaire">is_scalar

 Indique si une variable est un scalaire

fonction time

Retourne le timestamp UNIX actuel