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à :

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
}
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
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
 
}
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
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
}
 
}
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.

[EDIT] : j'ai aussi essayé de passer par les références, ça ne change rien...