Mise à jour d'une variable contenant une autre variable
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:
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:
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:
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...