Bonjour
Les tables de ma base de données sont en innoDB.
Et j'utilise les transactions pour préserver la cohérence de la BD.
à première vue cela fonctionne bien sauf dans un cas précis :
les tables :
resultat : clé primaire, idManip auto_incrémentécelll_type: clé primaire, cellCodecreate_cell_type : clé primaire, (idManip, cellCode) les clés étrangères des tables précédentesLe problème (semblait) simple.
1- Insertion dans resultat
2- récupération de l'id auto_incrémenté
3- Insertion dans cell_type
4- Insertion dans create_cell_type des deux valeurs récupérées précédemment...
Mais cela ne fonctionne pas, j'ai une erreur de violation de clé étrangère lorsque je veux faire l'insertion dans la dernière table(create_cell_type) et si je vais voir dans ma BD effectivement à ce moment là, idManip n'a pas été entré.
Le seul moyen pour que cela fonctionne c'est faire un commit après les insertions et dans ce cas, je perds tout l'intérêt de faire une transaction.
Mon code (simplifié)
Quelqu'un peut-il m'aider je n'arrive pas à comprendre le 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
23
24
25
26
27
28
29 //debut de transaction @mysql_query("BEGIN"); //insertion dans la bD dans la table resultat $attributs="idPlate, idExperience, dateManip, idProtocoleUsed, qualite"; $valeurs="$idPlate,$idExperience,'$dateManip', $protocole, $qualite"; $req="INSERT INTO resultat($attributs) VALUES ($valeurs)"; if(mysql_query($req)){ $idManip=mysql_insert_id(); } //insertion dans la table cell_type $attributs="cellCode,nomLabPrimaire,cellCode_Origin,nbPassages,mouseFeederCells,karyotype"; $valeurs="'$cell','$nomLabPrimaire','$cellCode_Origin',$nbPassages,$feeder,'$karyotype'"; $insertion="INSERT INTO cell_type ($attributs) VALUES ($valeurs)"; if(mysql_query($insertion)) { //insertion dans create_cell_type de l'idManip $sql1="INSERT INTO create_cell_type (idManip, cellCode) VALUES ('$idManip','$cell')"; if(mysql_query($sql1)) { @mysql_query("COMMIT"); $cellType[$i]=$cell; //on enregistre les types cellulaires crées dans un tableau } else { @mysql_query("ROLLBACK"); } }[/INDENT]
Merci
Partager