web-dev-qa-db-fra.com

Obtenir le dernier identifiant d'insertion après une insertion préparée avec PDO

J'utilise PHP PDO avec PostgreSQL pour un nouveau projet.

Étant donné la fonction suivante, comment puis-je retourner l'id de la ligne qui vient d'être insérée? Ça ne marche pas comme ça maintenant.

function adauga_administrator($detalii) {
    global $db;
    $ultima_logare = date('Y-m-d');

    $stmt = $db->prepare("INSERT INTO site_admins (sa_nume, sa_prenume, sa_user_name, sa_password, sa_email, sa_id_rol, sa_status, sa_ultima_logare) VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
    $stmt->bindParam(1, $detalii['nume']);
    $stmt->bindParam(2, $detalii['prenume']);
    $stmt->bindParam(3, $detalii['username']);
    $stmt->bindParam(4, md5(md5($detalii['parola'] . SIGURANTA_Parole) . SIGURANTA_Parole));
    $stmt->bindParam(5, $detalii['email']);
    $stmt->bindParam(6, $detalii['rol'], PDO::PARAM_INT);
    $stmt->bindParam(7, $detalii['status'], PDO::PARAM_INT);
    $stmt->bindParam(8, $ultima_logare);    
    $stmt->execute(); 

    $id = $db->lastInsertId();
    return $id;
}
41
Psyche

Depuis le Manuel :

Renvoie l'ID de la dernière ligne insérée ou la dernière valeur d'un objet séquence, selon le pilote sous-jacent. Par exemple, PDO_PGSQL () vous oblige à spécifier le nom d'un objet séquence pour le paramètre name.

Cela devrait être quelque chose comme:

return $db->lastInsertId('yourIdColumn');

[MODIFIER] Mettre à jour le lien vers le document

59
Alix Axel

Depuis le PHP manuel :

Par exemple, PDO_PGSQL () vous oblige à spécifier le nom d'un objet séquence pour le paramètre name.

Vous pouvez également utiliser RENVOYANT dans l'instruction INSERT et récupérer le résultat INSERT comme un résultat SELECT.

11
Frank Heikens

Les réponses précédentes ne sont pas très claires (doc AOP aussi)

Dans postgreSQL, les séquences sont créées lorsque vous utilisez le type de données SERIAL.

CREATE TABLE ingredients (
  id         SERIAL PRIMARY KEY,
  name       varchar(255) NOT NULL,
);

Le nom de la séquence sera donc ingredients_id_seq

$db->lastInsertId('ingredients_id_seq');
4
m4tm4t