8721 sujets

Développement web côté serveur, CMS

Bonjour à tous !


Alors j'ai un petit soucis pour insérer des données dans deux tables, voici le problème :
A) Un premier INSERT de données est fait dans une table A.

B) Ensuite un second INSERT est fait dans une table B
L'une des données à entrer dans cette table B est l'id de la ligne insérée dans la table A lors de l'étape A). Cet ID est donc une clé étrangère dans la table B.


Pour le moment, je récupère l'id en faisant une requete SELECT(intermédiaire entre l'étape A et B) en utilisant un WHERE sur la colonne "name" de la table A (qui devrait possiblement avoir des doublons de valeurs mais que j'empeche du coup pour avoir une unique réponse au SELECT).

Le code fonctionne, mais je ne trouve pas ma solution adaptée et optimisée Smiley ohwell


Quelle est la meilleure façon de procéder pour récupérer l'ID généré lors de l'étape A afin de le rentrer dans la table B avec le deuxieme INSERT ?

Faudrait-il créer un token aléatoire à ajouté dans la table A pour retrouver l'ID sans avoir besoin d'utiliser le champs "name"?

Ou existe il une meilleure solution ?

Merci d'avance ! Smiley cligne
Modifié par SpiStache (09 Jul 2014 - 16:21)
Hello,

La fonction lastInsertId() de PDO te permet de récupérer l'ID de la dernière ligne insérée. Cette solution me semble toute indiquée non ? =)

Tu trouveras la doc ici.

Bye,
Yokii
J'ai vu cette fonction et je te l'accorde les probabilités sont infimes.
Mais imaginons que deux personnes executent ce script au même moment, il est possible que le premier utilise l'ID inséré par la seconde personne ?

Enfin ça se joue au centieme de seconde j'imagine, est ce que c'est un scenario qu'on peut prendre en compte ou je vais vraiment trop loin ? Smiley biggol
Modifié par SpiStache (09 Jul 2014 - 16:47)
Ça m'est jamais arrivé personnellement ce genre de scénario.

Si tu veux être sûr à 100%, tu peux gérer toi même les ID pour la table A, avec un timestamp + le nom de la personne insérée Smiley cligne

Tu n'aura plus qu'a récupérer cet ID pour ta clef étrangère de la table B.
Ok, je vais rester sur lastinsertid du coup, ça sera moins lourd à gérer et je ne pense pas que la probabilité arrive dans le cadre de ce projet.

Super rapide en tout cas merci de tes réponses, passe une bonne soirée ! Smiley cligne
Administrateur
Normalement pour ce genre de fonctionnalité on passe en paramètre la connexion MySQL responsable de la dernière insertion, ou bien par défaut la fonction récupère la connexion courante. Donc on ne se retrouve jamais avec un autre ID qui aurait pu être initié dans un autre script parallèle.