mysqli_insert_id în PHP

Returnează id-ul generat automat (AUTO_INCREMENT) de ultimul INSERT.

Sintaxă
mysqli_insert_id(mysqli $mysql): string|int

Ce face mysqli_insert_id

Când tabelul are o coloană AUTO_INCREMENT, MySQL alege singur id-ul rândului nou. mysqli_insert_id îți spune ce id a primit, ca să îl poți folosi imediat, de exemplu pentru a salva produsele unei comenzi noi sau pentru a redirecționa către pagina ei.

Valoarea este păstrată separat pentru fiecare conexiune, deci nu se încurcă cu inserările făcute în același timp de alți vizitatori. Dacă ultima interogare nu a generat un id, rezultatul este 0.

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
$mysql Conexiunea pe care s-a făcut INSERT-ul.

Ce returnează

Id-ul generat sau 0.

Exemple

Exemplul 1: Id-ul produsului nou

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

mysqli_execute_query($conn, "INSERT INTO produse (nume, pret, stoc) VALUES (?, ?, ?)", ["Boxe", 320, 6]);
$id = mysqli_insert_id($conn);

echo "Produsul a fost salvat cu id-ul $id.\n";
echo "Link: /produs.php?id=$id";

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

Produsul a fost salvat cu id-ul 5.
Link: /produs.php?id=5

Exemplul 2: Comandă și rândurile ei

Id-ul comenzii noi este folosit imediat pentru rândurile din tabelul legat. Tranzacția face ca ambele inserări să reușească împreună.

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

mysqli_begin_transaction($conn);
mysqli_execute_query($conn, "INSERT INTO comenzi (client) VALUES (?)", ["Ana"]);
$idComanda = mysqli_insert_id($conn);

foreach ([2 => 1, 4 => 2] as $idProdus => $bucati) {
    mysqli_execute_query($conn, "INSERT INTO comenzi_produse (comanda_id, produs_id, bucati) VALUES (?, ?, ?)", [$idComanda, $idProdus, $bucati]);
}
mysqli_commit($conn);

echo "Comanda #$idComanda are 2 produse.";

Rezultat (cu un server MySQL și tabelele comenzi, comenzi_produse)

Comanda #1 are 2 produse.

Greșeli frecvente

  • Afli id-ul nou cu SELECT MAX(id) FROM produse. Dacă doi vizitatori salvează în același timp, poți primi id-ul celuilalt. mysqli_insert_id este sigur.

Comenzi înrudite

  • mysqli_prepare: Pregătește o interogare SQL cu semne ? în loc de valori. Este metoda sigură împotriva SQL injection.
  • mysqli_affected_rows: Returnează câte rânduri au fost modificate de ultimul INSERT, UPDATE, DELETE sau REPLACE.
  • mysqli_query: Trimite o interogare SQL către baza de date. Pentru SELECT returnează un rezultat din care citești rândurile.
  • PDO: PDO este interfața PHP comună pentru baze de date: același cod funcționează cu MySQL, PostgreSQL sau SQLite.