Ton code est très bizarre... D'abord tu me dis qu'il est normal que ton insertion dans la table "enzyme" échoue de temps en temps, mais tu écris :
$R_5 -> execute($EC,$NameE,$Family,$Nbgene) || die ("Failed to insert");
Autrement dit, en cas d'échec à insérer, tu veux que ton programme "meure", c'est à dire s'arrête... Je pensais que tu avais juste mis un execute() et que tu avais réglé DBI pour mourir automatiquement en cas d'échec. Mais non, tu fais explicitement le contraire de ce que tu veux, tu pourrais m'expliquer ton raisonnement ?
A priori, je vois mal la raison pour cette ligne : rows() est forcément 1 vu que la dernière instruction est une insertion et que si elle échoue tu tue le programme...
1 2 3 4
| eval { $R_6_1 ->execute( $GeneID,$NameG,LAST_INSERT_ID())};
if( $@ and $@ !~ "doublons" ) {
die "Erreur inattendue : $@";
} |
Ok... A priori ce execute() là devrais toujours marcher, non ? Alors pourquoi l'entourer du eval que je t'ai montré !
Bref... A priori last_insert_id() ne peut pas suffire dans ton cas, puisque l'insertion peut échouer. Donc tu devrais faire une requête pour déterminer la bonne id dans les cas où l'insertion a échoué et utiliser last_insert_id sinon.
--
Jedaï
Partager