Je bloque depuis quelques temps sur un code php. Celui-ci doit récupérer les lignes d'une source, vérifier si elles existent en base de données, Mettre à jour si elles existent ou insérer si elles n'existent pas.
Pour cela j'ai écris le code suivant :
<?php
$db = FonctionConnBdd();
$Source = "http://urlsource.fr/fichier.txt";
if(!is_array($Source)){
echo "Erreur Source";
}
foreach($Source as $src){
list($var1, $var2, $var3, $var4, $var5) = explode(',', $src);
// Vérification de la présence dans la base
$TryLine = $db->prepare("SELECT id FROM Matable WHERE var1=:var1 AND var2=:var2");
$TryLine->execute(array('var1'=>$var1,'var2'=>$var2));
$CountLine = $TryLine->rowCount();
$TryLine->closeCursor();
// Si existant -> update
if($CountLine == 1){
$UpdateLine = $db->prepare("UPDATE Matable SET var5=:var5 WHERE var1=:var1 AND var2=:var2");
$UpdateLine->execute(array('var1'=>$var1,'var2'=>$var2,'var5'=>$var5));
if(!$UpdateLine){
echo "Erreur Update";
}
$UpdateLine->closeCursor();
}// Fin CountLine->1
// Si n'existe pas -> Insert
if($CountLine == 0){
$InsertLine = $db->prepare("INSERT INTO Matable (id,var1,var2,var3,var4,var5) VALUES (:id,:var1,:var2,:var3,:var4,:var5)");
$InsertLine->execute(array(
'id'=>'','var1'=>$var1,'var2'=>$var2,'var3'=>$var3,'var4'=>$var4,'var5'=>$var5));
if(!$InsertLine){
echo "Erreur Insert";
}
$InsertLine->closeCursor();
} // Fin CountLine->0
}// Fin Foreach
?>
Toutefois, le fichier source peut contenir plus de 100.000 lignes. Donc le processus est très long. (probablement du fait de l'accompagnement d'autres fonctions avant et après le code présent ci-dessus)Je me demandai donc s'il y'avait possibilité d'optimiser le code afin de gagner en temps d’exécution.
Merci pour vos réponses.