Récupérer une valeur AUTOINCREMENT
Résolu
Jean-Guy Badiane
Messages postés
646
Date d'inscription
Statut
Membre
Dernière intervention
-
Jean-Guy Badiane Messages postés 646 Date d'inscription Statut Membre Dernière intervention -
Jean-Guy Badiane Messages postés 646 Date d'inscription Statut Membre Dernière intervention -
Bonjour à vous, chers amis consommateurs ! :)
Je travaille actuellement sur une routine en PHP, qui me permet de récupérer des fiches au format XML, de traiter leurs informations, et de les insérer dans une base de données mySQL.
Je possède en tout quatre tables. La principale possède un champ IDENTIFIANT, qui s'auto-incrémente à chaque insertion. Or je souhaiterais pouvoir récupérer cet identifiant généré par la base de données, afin de l'insérer dans les autres tables.
J'ai essayé avec la fonction LAST_INSERT_ID. Et le résultat ne me plait qu'à moitié. En effet, la première fiche est insérée avec un identifiant égal à 0. Cependant, la seconde est insérée, affectée d'un ID convenable.
Voici mon code, pourriez-vous me dire ce qui ne va pas ?
Je vous remercie d'avance, et vous souhaite une agréable soirée.
Jean-Guy Badiane.
Le saumon, ça voyage mal dans le mocassin.
Je travaille actuellement sur une routine en PHP, qui me permet de récupérer des fiches au format XML, de traiter leurs informations, et de les insérer dans une base de données mySQL.
Je possède en tout quatre tables. La principale possède un champ IDENTIFIANT, qui s'auto-incrémente à chaque insertion. Or je souhaiterais pouvoir récupérer cet identifiant généré par la base de données, afin de l'insérer dans les autres tables.
J'ai essayé avec la fonction LAST_INSERT_ID. Et le résultat ne me plait qu'à moitié. En effet, la première fiche est insérée avec un identifiant égal à 0. Cependant, la seconde est insérée, affectée d'un ID convenable.
Voici mon code, pourriez-vous me dire ce qui ne va pas ?
//BOUCLE pour chaque fiche //je récupère l'identifiant de mon fichier dans la variable $idfichier //je récupère toutes les informations nécessaires dans un tableau $fiche[] $rechercheFiche="SELECT identifiant_bd FROM 'matable' WHERE identifiant_xml='".addslashes($idfichier)."'"; $resultatRechercheFiche = em_db::row($rechercheFiche); //si on ne récupère rien, la fiche n'est pas présente dans la table if(!($resultatRechercheFiche['identifiant_bd'])) { $date = time(); $insertF="INSERT INTO fichier (identifiant, nom, description, date_modif) VALUES (NULL, '681','".addslashes($fiche['nom'])."','".$date."')"; em_db::exec($insertF); $masuperquery="SELECT LAST_INSERT_ID()"; $resultmasuperquery = em_db::row($masuperquery); $supermasuperquery = implode($resultmasuperquery); $insertL="INSERT INTO langue (identifiant, id_lang) VALUES ('".addslashes($supermasuperquery)."', 'fr')"; em_db::exec($insertL); //première fiche, identifiant égal à 0 //deuxième fiche, identifiant égal à 99, comme prévu $insertS="INSERT INTO structure (identifiant, id_structure) VALUES ('".addslashes($supermasuperquery)."', '1')"; em_db::exec($insertS); //idem pour les autres $idstruct="SELECT id_structure FROM 'structure' WHERE identifiant='".addslashes($supermasuperquery)."'"; $resultidstruct = em_db::row($idstruct); $insertM="INSERT INTO matable (identifiant_bd, identifiant_xml, date_modi, id_structure) VALUES ('".addslashes($supermasuperquery)."', '".addslashes($fiche['id'])."', '".addslashes($fiche['dateMAJarticle'])."', '".addslashes($resultidstruct['id_structure'])."')"; em_db::exec($insertM); $chaine = '<td valign="top"><pre>Nouvelle insertion</pre></td>'; //affichage de $chaine }
Je vous remercie d'avance, et vous souhaite une agréable soirée.
Jean-Guy Badiane.
Le saumon, ça voyage mal dans le mocassin.
A voir également:
- Récupérer une valeur AUTOINCREMENT
- Recuperer message whatsapp supprimé - Guide
- Comment recuperer une video sur youtube - Guide
- Récupérer mon compte facebook désactivé - Guide
- Comment récupérer un compte facebook piraté - Guide
- Impossible de récupérer mon compte gmail - Guide
6 réponses
Malheureusement, mon cher ami, j'ai déjà testé cette possibilité.
Je ne trouve toujours pas ce qui cloche. Pourtant, les fonctions devraient rouler. Mais je ne comprends pas pourquoi l'identifiant n'est pas récupéré la première fois pour l'actualité A, mais récupéré pour l'actualité A'.
Merci d'avance, cher Siluni. :)
Jean-Guy Badiane, animateur d'événementiels.
Le saumon, ça voyage mal dans le mocassin.
$supermasuperquery = mysql_insert_id(); //avec cette fonction, cela ne marche pas $masuperquery="SELECT identifiant FROM 'fichier' WHERE identifiant='".mysql_insert_id()."'"; $supermasuperquery = em_db::row($masuperquery); //comme ça, ce n'est pas mieux
Je ne trouve toujours pas ce qui cloche. Pourtant, les fonctions devraient rouler. Mais je ne comprends pas pourquoi l'identifiant n'est pas récupéré la première fois pour l'actualité A, mais récupéré pour l'actualité A'.
Merci d'avance, cher Siluni. :)
Jean-Guy Badiane, animateur d'événementiels.
Le saumon, ça voyage mal dans le mocassin.
Je viens d'effectuer de nouveaux tests.
En réalité, le problème ne vient pas des noms des fiches.
Il s'agit en fait de la fonction LAST_INSERT_ID dans ma boucle.
LAST_INSERT_ID n'agit pas lors du premier passage dans ma boucle (donc pour la première fiche). C'est pour cela qu'elle lui affecte la valeur 0. En revanche, pour les autres fiches, la fonction est OK, et donne à chacune un joli petit numéro.
Comment cela se fait-il ?
Merci d'avance.
Un caniche abricot à celui ou à celle qui me sortira du pétrin ! :)
Jean-Guy Badiane.
En réalité, le problème ne vient pas des noms des fiches.
Il s'agit en fait de la fonction LAST_INSERT_ID dans ma boucle.
LAST_INSERT_ID n'agit pas lors du premier passage dans ma boucle (donc pour la première fiche). C'est pour cela qu'elle lui affecte la valeur 0. En revanche, pour les autres fiches, la fonction est OK, et donne à chacune un joli petit numéro.
Comment cela se fait-il ?
Merci d'avance.
Un caniche abricot à celui ou à celle qui me sortira du pétrin ! :)
Jean-Guy Badiane.
Je ne comprends pas le bug, il doit y avoir quelque chose qui m'échappe.
Toujours est-il que seule la fonction LAST_INSERT_ID marche.
mysql_insert_id ne récupère aucun identifiant, et une requête du style select(max)... met le bazar dans toutes les ID.
Un petit coup de main, s'il vous plait ? :)
Merci d'avance ! Jean-Guy.
Le saumon, ça voyage mal dans le mocassin.
Toujours est-il que seule la fonction LAST_INSERT_ID marche.
mysql_insert_id ne récupère aucun identifiant, et une requête du style select(max)... met le bazar dans toutes les ID.
Un petit coup de main, s'il vous plait ? :)
Merci d'avance ! Jean-Guy.
Le saumon, ça voyage mal dans le mocassin.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Nouvelles précisions.
Apparemment, ma première insertion dans la table 'FICHIER' est ignorée. J'ai testé une nouvelle requête, qui récupère le premier identifiant, dans l'ordre décroissant (OK, puisqu'il s'agit d'une incrémentation).
Cependant, pour ma première fiche, le programme lui attribue un identifiant déjà utilisé, précisément celui de la dernière fiche créée avant l'exécution du programme.
Comme si je n'avais rien inséré entretemps. :)
Jean-Guy Badiane.
Apparemment, ma première insertion dans la table 'FICHIER' est ignorée. J'ai testé une nouvelle requête, qui récupère le premier identifiant, dans l'ordre décroissant (OK, puisqu'il s'agit d'une incrémentation).
$deuxresultmasuperquery = em_db::row('SELECT identifiant FROM 'fichier' ORDER BY identifiant DESC LIMIT 1');
Cependant, pour ma première fiche, le programme lui attribue un identifiant déjà utilisé, précisément celui de la dernière fiche créée avant l'exécution du programme.
Comme si je n'avais rien inséré entretemps. :)
Jean-Guy Badiane.
Finalement, le problème est résolu.
Note aux futurs consommateurs qui auront le même souci, et qui liront ce thread au détour d'une recherche sur ce fabuleux outil qu'est Internet...
-> utilisez la méthode grobourin (big up à Eaulive) : tout supprimer.
Cela fonctionne à nouveau, et ça fait un bien fou de tout détruire !
(ne pas confondre avec Diên Biên Phù, qui le fut également, mais en 1954)
Merci encore de votre soutien ! :)
Jean-Guy Badiane.
Le saumon, ça voyage mal dans le mocassin.
Note aux futurs consommateurs qui auront le même souci, et qui liront ce thread au détour d'une recherche sur ce fabuleux outil qu'est Internet...
-> utilisez la méthode grobourin (big up à Eaulive) : tout supprimer.
Cela fonctionne à nouveau, et ça fait un bien fou de tout détruire !
(ne pas confondre avec Diên Biên Phù, qui le fut également, mais en 1954)
Merci encore de votre soutien ! :)
Jean-Guy Badiane.
Le saumon, ça voyage mal dans le mocassin.