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.
Inscription à :
Publier les commentaires (Atom)
6 comments:
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
je vous remercie Mr Anonyme j'ai testé ton exemple sur mon code est ça marche a la merveille
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
Voir la solution sur ce lien:
http://www.php.net/manual/fr/pdo.lastinsertid.php#85129
et si 2 utilisateur insert au meme moment comment se deroule le lastinsertid??
gros risque de confusion dans l'insertion
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