mysqli_stmt_insert_id în PHP

Returnează id-ul AUTO_INCREMENT generat de ultima execuție a unei interogări pregătite INSERT.

Sintaxă
mysqli_stmt_insert_id(mysqli_stmt $statement): string|int

Ce face mysqli_stmt_insert_id

Este varianta pentru interogări pregătite a lui mysqli_insert_id. Valoarea este legată de interogarea pregătită, deci rămâne corectă chiar dacă între timp ai rulat alte interogări pe conexiune.

Exemplele de pe această pagină folosesc baza de date magazin, cu tabelul produse (coloanele id INT AUTO_INCREMENT, nume VARCHAR(100) NOT NULL, pret INT și stoc INT) și patru rânduri: Laptop (3200 lei, 5 buc.), Mouse (80 lei, 40 buc.), Monitor (900 lei, 0 buc.) și Tastatură (150 lei, 12 buc.). Comenzile SQL sunt explicate în secțiunea MySQL. Rezultatele au fost scrise pentru MySQL 8, pentru că exemplele au nevoie de un server de baze de date.

Parametri

Parametru Descriere
$statement Interogarea pregătită și executată.

Ce returnează

Id-ul generat sau 0.

Exemple

Exemplul 1: Id-ul fiecărui produs inserat

<?php
$conn = mysqli_connect("localhost", "ana", "parola_ta", "magazin");
mysqli_set_charset($conn, "utf8mb4");

$stmt = mysqli_prepare($conn, "INSERT INTO produse (nume, pret, stoc) VALUES (?, ?, ?)");
foreach ([["Boxe", 320, 6], ["Microfon", 210, 4]] as [$nume, $pret, $stoc]) {
    mysqli_stmt_bind_param($stmt, "sii", $nume, $pret, $stoc);
    mysqli_stmt_execute($stmt);
    echo "$nume: id " . mysqli_stmt_insert_id($stmt) . "\n";
}

Rezultat (cu un server MySQL și tabelul produse de mai sus)

Boxe: id 5
Microfon: id 6

Greșeli frecvente

  • Citești id-ul înainte de mysqli_stmt_execute. Rezultatul este 0, pentru că rândul nu a fost încă inserat.

Comenzi înrudite

  • mysqli_insert_id: Returnează id-ul generat automat (AUTO_INCREMENT) de ultimul INSERT.
  • mysqli_stmt_affected_rows: Returnează câte rânduri a modificat ultima execuție a unei interogări pregătite (INSERT, UPDATE, DELETE).
  • mysqli_prepare: Pregătește o interogare SQL cu semne ? în loc de valori. Este metoda sigură împotriva SQL injection.