Subscribe:

Ads 468x60px

dimanche 22 août 2010

Récupérer l'id après un insert sous PDO

Il s'agit d'un problème qui s'est présenté à moi lors de mon apprentissage de PHP/MySQL. En fait je fais une insertion dans ma base de données et je veux travailler juste après avec l'enregistrement que je viens de faire. Or tout le monde sait qu'on ne travaille qu'avec l'id de l'enregistrement en question, c'est plus simple et plus clair. Mais comment connaître cet id alors qu'il est auto généré par MySQL (auto-increment)?
Eh bien il existe une méthode toute simple de l'objet PDO créé lors de la connexion à la base de données : lastInsertId()
Sa définiton détaillée se trouve à l'adresse suivante: http://php.net/manual/fr/pdo.lastinsertid.php
En tout cas elle te retourne l'id du dernier enregistrement inséré dans la base de données.
J'espère que ça aidera des bleux comme moi.

6 comments:

Anonyme a dit…

voici un exemple d'utilisation ce qui pourra aidez ceux qui tombe sur cette page

$bdd = new PDO('mysql:host=127.0.0.1;dbname=upload', 'root', '');//connection a la BDD via PDO

$bdd->exec("INSERT INTO picture (data_picture) VALUES ('".$data."');");//Execution de la requete ici c'est un systeme pour stocker des image dans une base de donnée mais sa fonctionne pour tout les insert into

$id_data = $bdd->lastInsertId();//on recupere l'id de notre enregistrement pour le reutiliser plus tard grace a lastInsertId

Anonyme a dit…

je vous remercie Mr Anonyme j'ai testé ton exemple sur mon code est ça marche a la merveille

Anonyme a dit…

Bah non ça marche pas parce que "$bdd->lastInsertId()" réalise une NOUVELLE connexion et "$id_data" ne peut alors valoir autre chose que "0"... so coooool

Anonyme a dit…

Voir la solution sur ce lien:
http://www.php.net/manual/fr/pdo.lastinsertid.php#85129

Anonyme a dit…

et si 2 utilisateur insert au meme moment comment se deroule le lastinsertid??
gros risque de confusion dans l'insertion

Anonyme a dit…

Normalement, il n y aura pas de problèmes. En fait la fonction ne concerne que les insertions faites à partir de la session de l'utilisateur qui appelle la fonction. Comme les autres utilisateurs auront différentes sessions, il ne devrait pas y avoir de collision.

Enregistrer un commentaire