Optimiser la mise à jour de la Base de données MySQL

Fermé
nguim Messages postés 16 Date d'inscription mercredi 12 février 2014 Statut Membre Dernière intervention 25 février 2014 - Modifié par nguim le 25/02/2014 à 16:03
nguim Messages postés 16 Date d'inscription mercredi 12 février 2014 Statut Membre Dernière intervention 25 février 2014 - 25 févr. 2014 à 16:44
Bonsoir à tous !

Je suis débutant en PHP, et j'ai écrit un petit code pour pouvoir mettre à jour les données de ma BDD.
En fait ces informations sont contenues dans un fichier texte (de nom fichab.txt), la prmière colonne du fichier texte correspond à l'IMS et la seconde colonne correspond à MED. Et le but est de:

Pour chaque IMS du fichier texte (même IMS qui se trouve dans la BDD) remplacer son MED de la BDD par celui qui est contenu dans le ficher texte. Bref l'IMS et MED se trouvent dans une même table de la BDD et c'est la colonne MED que l'on veut modifier.

Voici la structure de mon fichier texte qui a la structure que ma BDD.

(------IMS-----------------------MED)
624030743830000 1100001D7DEE6D
624030743830001 CC00001D7DEE6E
624030743830002 3100001D7DEE6F
624030743830003 4100001D7DEE70
624030743830004 CC00001D7DEE71


Voici mon script:

<?php
 
set_time_limit(0);
error_reporting(E_ALL ^ E_NOTICE);
 
mysql_connect('localhost','root','');
mysql_select_db('gestnum');
/On ouvre le fichier en question (en lecture seule)
$handle = fopen("fichab.txt", "r");
 
//on parcours tout le fichier (en faisant croire qu'il s'agit d'un csv pour faciliter le traitement)
//$i = 0;
 
        while (($data = fgetcsv($handle, 0, " ")) !== FALSE) 
        {
 
 
                $queryBase = 'UPDATE coordab SET MEID="'.$data[1].'" WHERE IMSI="'.$data[0].'"';
                mysql_query($queryBase);
 
        } 
 
 
 //on ferme le fichier
fclose($handle);
 
?>



Lorsque je l'exécute, il fait la mise à jour mais en prenant beaucoup de temps car le fichier contient 9999 lignes.

Je voudrais que vous m'aidiez avec des astuces pour pouvoir réduire le temps d'exécution de ce script.

Merci d'avance.
A voir également:

1 réponse

Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
25 févr. 2014 à 16:06
Bonjour,

Les erreurs MySQL ne sont pas affichées, à moins que cela soit demandé explicitement, comme ceci :
mysql_query($queryBase) or die("Erreur SQL dans $queryBase<br />".mysql_error());


Pour ton problème, je pense que cela vient de la virgule qui traîne dans ta requête, juste avant le WHERE. Supprime-la, cela devrait aller mieux.

De même pour les guillemets, en SQL c'est plutôt ' que l'on utilise pour délimiter les chaînes de caractère. Il me semble que MySQL est plutôt permissif sur le sujet, donc cela ne pose peut-être pas de problème... Mais il vaut mieux inverser :
$queryBase = "UPDATE coordab SET MEID='".$data[1]."' WHERE IMSI='".$data[0]."'";


Xavier
0
nguim Messages postés 16 Date d'inscription mercredi 12 février 2014 Statut Membre Dernière intervention 25 février 2014
25 févr. 2014 à 16:44
Merci pour votre aide.

ça fait déjà la mise à jour, mais le temps d'exécution est très élevé. Le fichier a plus de 9999 lignes et ça prend énormément de temps. S'il vous plait aidez moi encore à optimiser ce code, à réduire le temps d'exécution.

Merci d'avance.
0