IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Erreur time out code [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 18
    Par défaut Erreur time out code
    Bonjour, j'ai le message d'erreur suivant qui survient lors que j'execute ce scripts ci-bas :

    Fatal error: Maximum execution time of 90 seconds exceeded in I:\phplogiciel\ArchiveDirm\chargement\chargement_radio.php on line 35
    Voici mon code :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    <?
    include("../connexion/connexion_bd.php");
     
    //chargement de la table radio
     
    		echo "	*************************** Debut du Chargement des patients ******************************	";
    		?> <br/><?
    		$requete = mysql_query("SELECT num_radio, nom_pat, prenom_pat,nomjf_pat, datenaiss_pat,Sexe_pat, Cliche_pat, Secteur,Date_radio FROM chargement_radio") OR die("erreur requete 1er SELECT");
     
     
    		while ($R_requete = mysql_fetch_array($requete)) { 
     
    			// Chargement des données dans les variables
    			$numradio = $R_requete['num_radio'];
    			$nom = $R_requete['nom_pat'];
    			$nomjf = $R_requete['nomjf_pat'];
    			$sexe = $R_requete['Sexe_pat'];
    			$prenom = $R_requete['prenom_pat'];
    			$datenaiss = $R_requete['datenaiss_pat'];
    			$cliche = $R_requete['Cliche_pat'];
    			$secteur = $R_requete['Secteur'];
    			$Date_radio = $R_requete ['Date_radio'];
     
     
     
    			//Vérification du sexe des patients
    			if (ereg("1",@$sexe)) { $sexe = 'M'; }
    			elseif (ereg("2",@$sexe)) { $sexe = 'F'; }
    			else { $sexe = 'NULL'; }
     
     
     
    			// Détection des doublons
     
    			$R_patient = mysql_query("SELECT * FROM patients WHERE nom='$nom' AND prenom='$prenom' AND date_naiss=str_to_date('$datenaiss','%Y-%m-%d')") OR die("erreur requete 2ième SELECT");
    			$annee = substr($datenaiss, -4);
    			// Si pas de doublon . . .
    			if (mysql_num_rows($R_patient) == 0)   {			
    				mysql_query("INSERT INTO patients(ipp, nom, prenom, nom_de_jf, date_naiss,annee_naiss, ancienne_date, dernier_soin, sexe, decede, precisions ) VALUES( NULL, '$nom', '$prenom', '$nomjf', str_to_date('$datenaiss','%Y-%m-%d'), '$annee', ' ', ' ', '$sexe', ' ', ' ')") OR die(mysql_error());
    			}
    				?> <br/><?
    				echo "$nom";
    }		
     
     
    		echo "	*************************** Fin de l'enregistrement des nouveaux patients ******************************	";
     
    ?>
    Je ne trouve pas que mon code est trop complexe, peut-etre une optimisation que je n'ai pas vu ?

    Merci d'avance,

    Anthony

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Le code n'est pas particulièrement complexe mais le traitement qu'il effectue peut être très long s'il y a beaucoup de lignes dans les tables radio et patient.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 18
    Par défaut
    Merci de ta rapidité,

    J'ai 3376 entrées dans les radios et 83074 dans les patients,

    Cela explique-t-il la lenteur d'execution du script ?

    Mais ce que je ne comprend pas, c'est que cela fonctionne sur un serveur test.

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Anthony_ Voir le message
    J'ai 3376 entrées dans les radios
    Cette requête va dons s'exécuter 3376 fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * 
    FROM patients 
    WHERE nom='$nom' 
      AND prenom='$prenom' 
      AND date_naiss = str_to_date('$datenaiss','%Y-%m-%d')
    Les colonnes nom et prenom sont-elles indexées ?

    Le fait qu'il y ait une conversion en date à faire dans la requête n'arrange pas les choses. Tu devrais faire la conversion en PHP et envoyer la variable formatée 'aaa-mm-jj' dans la requête.

    S'il n'y a pas beaucoup de "doublons", il y aura beaucoup d'insertions parmi les 3376 fois.
    Avec à chaque fois une réorganisation de l'index de la table.

    Il serait plus sage de faire une jointure entre les deux tables pour trouver les patients de la table radio non présents dans la table patient et d'injecter le résultat dans la table patients :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    CREATE TEMPORARY TABLE temp
    SELECT r.nom_pat, r.prenom_pat, r.nomjf_pat, 
      STR_TO_DAT(r.datenaiss_pat, '%Y-%m-%d') AS date_naiss_pat,
      EXTRACT(YEAR FROM STR_TO_DAT(r.datenaiss_pat, '%Y-%m-%d')) AS r.annee_naiss_pat, 
      r.Sexe_pat
    FROM radio AS r 
    LEFT OUTER JOIN patients AS p 
      ON r.nom_pat = p.nom
      AND r.prenom_pat = p.prenom_pat
      AND STR_TO_DAT(r.datenaiss_pat, '%Y-%m-%d') = p.date_naiss
    WHERE p.ipp IS NULL;
     
    INSERT INTO patients(nom, prenom, nom_de_jf, date_naiss, annee, sexe)
    SELECT nom_pat, prenom_pat, nomjf_pat, date_naiss_pat, annee_naiss_pat, Sexe_pat
    FROM temp
    J'ai supposé ci-dessus que ipp est l'identifiant du patient.

    A noter qu'en php, ces deux requêtes doivent être exécutées successivement par la même connexion et grâce à deux instructions mysql_query.

    Dans phpMyAdmin, les deux requêtes (la première se terminant par un point-virgule) peuvent être directement entrées dans la fenêtre SQL et lancées.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur de Time Out et Checksum sur LABVIEW
    Par Koulou dans le forum LabVIEW
    Réponses: 2
    Dernier message: 29/07/2011, 09h44
  2. Erreur TNS-12535, operation timed out
    Par sphax.wd dans le forum Administration
    Réponses: 0
    Dernier message: 09/05/2009, 04h14
  3. Erreur Script timed out
    Par niou142 dans le forum ASP
    Réponses: 4
    Dernier message: 14/01/2009, 11h53
  4. [OSQL] Time out et code retour
    Par Invité dans le forum Outils
    Réponses: 5
    Dernier message: 30/12/2008, 08h13
  5. ERREUR 10024 - connexion timed out
    Par dsr57 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 20/06/2007, 22h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo