Bonsoir à tous,
j'ai un problème avec du code Php/MySQL, je fais donc appel à votre générosité pour me débuguer !
Mon script, en gros, agit en deux temps :
il crée une base de données avec des tables, dont les clefs primaires sont en auto-increment, et dont certaines possèdent une clef étrangère
il peuple ensuite les tables en fonction d'un fichier que j'uploade
Au départ, j'effectuais des requêtes séparées, donc pour X tables je faisais X requêtes avec tout ce que ça implique, les blocs conditionnels, etc....ça avait donc cette gueule là :
et ainsi de suite ! Linéairement, je définissais la requête, puis je l'exécutais. Lorsque j'arrivais au peuplement d'une table contenant une clef étrangère, je procédais comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 $requete1 = "INSERT INTO matable1 blablabalabla"; if (mysqli_query($link, $requete1 )) { blablablabla }
Bref, tout cela marchait super bien...jusqu'à ce que je décide de simplifier mon code, et de faire comme j'ai fait pour ma création de tables, c'est à dire placer les requêtes dans un tableau et les lancer avec une boucle :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 //je sais qu'après avoir rempli une table dont la clef primaire s'auto incrémente, je peux récupérer cette valeur $auto_increment = mysqli_insert_id($link) // Ici dans les valeurs je place la valeur de mon auto incrément dans le champ correspondant à une foreign key $requeteX = "INSERT INTO matableX blablabalabla VALUES (...." ' ".$auto_increment." ' "...) //Ici je balance la requete if (mysqli_query($link, $requeteX )) { blablablabla }
Mais le problème c'est que lorsque j'arrive à la première requête qui utilise $auto_increment, un echo de la requête totale montre que la variable n'a pas été mise à jour et possède la valeur que je lui ai donnée initialement, c'est à dire vide. Alors bien sûr j'ai quand même fait un echo de $auto_increment juste avant de lancer la requête, et elle me donne la bonne valeur de l'index. Elle s'est donc bien mise à jour. Mais dans la requete, elle a gardé sa valeur d'origine. J'ai essayé de faire ça avec des variables dynamiques, j'ai exactement le même problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 //je déclare $auto_increment sinon je ne peux pas l'utiliser, et je l'initialise à vide $auto_increment=''; //je définis toutes mes requêtes $requête[0] = "INSERT INTO matable1 blablabalabla"; ... $requete[X] = "INSERT INTO matableX blablabalabla VALUES (...." ' ".$auto_increment." ' "...) //je les lance dans un for dans lequel je teste si mysqli_insert_id($link) renvoie quelque chose, auquel cas je place son contenu dans $auto_increment for ($i;$i<=X;i++) { //si un auto increment s'est produit, il renverra autre chose que la chaine vide donc je mets à jour if (mysqli_insert_id($link)<>'') { $auto_increment=mysqli_insert_id($link); } //Ici je balance la requete if (mysqli_query($link, $requeteX )) { blablablabla } }
[EDIT] : j'ai aussi essayé de passer par les références, ça ne change rien...
Partager