|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre confirmé
![]() |
Le titre qui veut rien dire...
Je developpe ici. la table personne: id nom id_objet la table objet id_objet num prix J'ai le nom du client, l'id_objet. j'ai l'id_objet, son num et son prix. Je dois entré dans ma table la personne et l'objet en même temps. les id etant auto-increment pour les deux tables, comment faire ? je peux pas definir l'objet avant, car si y'a 2 enregistrements simultanés, je ne pourrai pas récup les infos. et je peux pas enregistré la personne, puisque je n'ai pas l'id_objet... Comment faire ? je pense qu'il doit y'a voir possibilite d'utiliser comme id le temps Unix... Mais si je peux faire ça avec des ptits nombre, ça m'arrange...
__________________
n'oubliez pas la balise |
|
|
00
|
|
|
#2 | ||
|
Expert Confirmé Sénior
![]() Laurent WillemsExpert Stop/Start Inscription : septembre 2002 Messages : 2 551 ![]() |
Tu insères d'abord les infos de ton objet dans la table objet.
tu récupères id_objet de la table objet via la fonction mysql_insert_id() ensuite tu insères les infos de ta personne et tu remplis le champ id_objet de la table personne avec la valeur récupurée précedemment via mysql_insert_id() Exemple Code :
|
||
|
|
00
|
|
|
#3 |
|
Membre confirmé
![]() |
Mais si y'a deux enregistrement en même temps (rare, mais possible), ça marche aussi ??
__________________
n'oubliez pas la balise |
|
|
00
|
|
|
#4 | ||
|
Expert Confirmé Sénior
![]() Laurent WillemsExpert Stop/Start Inscription : septembre 2002 Messages : 2 551 ![]() |
Bah pour deux enregistrements -> tu reproduis 2 fois la séquence de code mentionnée plus haut.
Pour X enregistrement -> tu reproduis x fois la séquence de code. Code :
|
||
|
|
00
|
|
|
#5 | ||
|
Expert Confirmé
![]() ![]() Urbaniste Inscription : juillet 2004 Messages : 1 424 ![]() |
c'est une des limitation de MySQL
avec un moteur SQL conforme tu utiliserais une séquence et tu ferais un Next sur ta séquence ensuite tu ouvrirais une transaction pour faire tes insert avec MySQL tu ne peux pas tu peux faire un truc qui y resemble mais jamais tu auras la garantie absolue par le moteur de l'intégrité de tes données (le risque est rare mais il existe) pour obtenir l'id tu fais Code :
mysql_query('SHOW TABLE STATUS LIKE objet'); tu fais Code :
ce qui fais que si un autre script s'exécute en même temps tu auras un conflit d'id. 2) la transaction fonctionnera avec MySQL que si tu utilise InnoDB dans le cas contraire si pour une raison ou une autre ton script ton serveur ta liaison avec la base quoi que ce soit plante entre les insert ta base est incohérente. en fait MySQL ne sait pas résoudre ce pb de façon éficasse. pour la version 5 je ne sais pas j'ai pas pu tester pour les autres aucune garantie, aucuns moyen de gérer les accès concurant sur le serveur. aucun moyen de garantir l'intégrité. en général MySQL se montre performant quand on a une appli qui fait beaucoup de Select et peu de Insert ou Update. dans ce cas on mise sur le fait que les écritures étant rares elles ont extremement peu de chance d'arriver en même temps. si ton appli fait de l'écriture intenssive et que dois garantir l'intégrité soit tu écrit un frontal qui vas cenraliser les accès en écriture et les ordonner pour offir cette garantie (en clair refaire une partite de MySQL) soiit tu prends un moteur SQL sérieux genre PosgreSQL pour rester dans l'open source ou Oracle Sybase et même SQLServeur. A+JYT |
||
|
|
00
|
|
|
#6 |
|
Membre confirmé
![]() |
j'ai utilisé $last_id_objet = mysql_insert_id();
Mais si j'ai un probleme par la suite, je tiendrai compte des autresrques. merci
__________________
n'oubliez pas la balise |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com