41 votes

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

J'utilise PDO PHP 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? Cela ne fonctionne pas comme il se présente 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;
}
 

59voto

Alix Axel Points 63455

Du manuel :

Renvoie l'ID de la dernière ligne insérée ou la dernière valeur d'un objet de séquence, en fonction du pilote sous-jacent. Par exemple, PDO_PGSQL () nécessite que vous spécifiiez le nom d'un objet séquence pour le paramètre name.

Cela devrait être quelque chose comme:

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

11voto

Frank Heikens Points 29270

Du manuel PHP:

Par exemple, PDO_PGSQL () nécessite que vous spécifiiez le nom d'un objet séquence pour le paramètre name.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X