mysqli_insert_id

mysqli_insert_id($db)

Renvoie la valeur de la colonne AUTO_INCREMENT créée par le dernier INSERT sur cette connexion – par exemple le numéro d’une nouvelle commande à laquelle on ajoute ensuite les articles. Sans insertion préalable, elle renvoie 0.

Paramètres

  • $db – la connexion.

Exemples

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$db = mysqli_connect("localhost", "user", "password", "shop");
mysqli_set_charset($db, "utf8mb4");
$stmt = mysqli_prepare($db, "INSERT INTO products (name, price, stock) VALUES (?, ?, ?)");
$name = "Baguette";
$price = "35.00";
$qty = 20;
mysqli_stmt_bind_param($stmt, "ssi", $name, $price, $qty);
mysqli_stmt_execute($stmt);
$id = mysqli_insert_id($db);
echo $id; // 4
echo mysqli_fetch_row(mysqli_query($db, "SELECT name FROM products WHERE id = " . (int) $id))[0]; // Baguette

Points d’attention

  • La valeur appartient à la connexion, pas à la table – des visiteurs simultanés n’écrasent pas l’ID d’un autre visiteur. N’utilisez donc pas SELECT MAX(id), qui pourrait renvoyer la ligne d’un autre visiteur.
  • L’insertion de plusieurs lignes par un seul INSERT renvoie l’ID de la première ligne insérée.
  • Le nombre après "… WHERE id = ".(int) $id n’est sûr que grâce à la conversion en entier – les valeurs des visiteurs passent toujours par des points d’interrogation.

Fonctions associées :
mysqli_stmt_execute()
mysqli_affected_rows()
mysqli_begin_transaction()
mysqli_prepare()