Bonjour,

Dans un script, je lis, ligne par ligne, un fichier xls contenant 10000 lignes et une quinzaine de colonnes.

Pour le lire toutes les lignes en affectant mes variables avec le contenu de chaque cellule et effectuer, pour chaque ligne,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
"SELECT * from cibles where tel = '" . $param[0] . "'"
, le temps d'exécution est de 5.09149384499 micro secondes, sachant que mon champ tel est déclaré comme unique dans ma table.

Par contre, dès que j'exécute le code suivant pour chaque ligne, je passe en time out, malgré mon set_time_limit(600); en début de script :

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
if($rech == "Aucun résultat")
 {
   if($erreurCible == "Enregistrement effectué")
    $erreurCampagne_cible = $campagne->determinerCible($tab['tel'], $idCampagne, "Dernier id"); //Création de l'enregistrement campagne-cible dans la table campagnes_cibles
   else
     $erreurCampagne_cible = "pas d'insertion suite à la non-insertion précédente";
 }
else
 {
   if($erreurCible == "Modification enregistrée")
    $erreurCampagne_cible = $campagne->determinerCible($tab['tel'], $idCampagne, "tel"); //Création de l'enregistrement campagne-cible dans la table campagnes_cibles
  else
    $erreurCampagne_cible = "pas d'insertion dans la table campagnes_cibles suite à la non-mise-à-jour précédente";
 }
 
$textErreur .= ", et dans la table campagnes_cibles, " . $erreurCampagne_cible. "\r\n";
Voici la méthode appellé dans mon objet $campagne :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
public function determinerCible($telephone, $idCampagne, $maniere)
 {
   $tab[0] = $telephone;
   $tab[1] = $idCampagne;
   $tab[2] = $maniere; //L'insertion de l'id de la cible dans la table campagnes_cibles se fait soit via un select par le tel, soit par le las_insert_id() => $maniere == "tel" ou "Dernier id"
   $transaction = CtransactionsBdd::GetInstance("MYSQL", "speedcall");
   $resuReq = $transaction->insert("MYSQL_determinerCible", $tab);
 
   return $resuReq;
 }
Voici la méthode select() appelée :

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
public function select($requ, $tableau)
 {
   $requete = requete($requ, $tableau);
 
   switch(self::$typeBase)
     {
      case "MYSQL":
       $result = mysql_query($requete, self::$connect);
 
       if(! $result)
        self::$erreur = "Impossible d'effectuer la sélection " . $requete;
       else
        {
          if (! mysql_num_rows($result))
           self::$erreur = "Aucun résultat";
          else
            {
              while($row = mysql_fetch_assoc($result))
               $resultatSelect[] = $row;
 
              mysql_free_result($result);
              return $resultatSelect;
            }
        }
 
     break;
   }
 }
Et enfin, voici la fonction requete() appellée :

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
function requete($req, $param)
 {
   switch($req)
     {
      ...
 
      case "MYSQL_determinerCible":
        $req = "insert into campagnes_cibles set refCampagne = " . $param[1] . ", refCible = ";
 
        if($param[2] == "tel")
         $req .= "(select id from cibles where tel = '" . $param[0] . "')";
        else
         $req .= "LAST_INSERT_ID()";
 
        return $req;
        break;
      }
 }
Donc, in fine, pour chaque ligne (il y en a 10000), je fais

- soit
Code : Sélectionner tout - Visualiser dans une fenêtre à part
insert into campagnes_cibles set refCampagne = idCampagne, refCible = LAST_INSERT_ID()
- soit
Code : Sélectionner tout - Visualiser dans une fenêtre à part
insert into campagnes_cibles set refCampagne = idCampagne, refCible = (select id from cibles where tel = 'telephone')
Comment pourrais-je m'y prendre pour avoir un temps d'exécution raisonnable?

Merci d'avance pour votre aide