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 :

Temps de réponse


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2017
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Temps de réponse
    Bonjour,

    J'ai une application PHP qui interroge une base Oracle.
    Les requêtes s'exécutent très rapidement lorsque je les teste avec sqlDeveloper mais dès que je passe par mes pages php elles sont très longues et me provoquent une erreur 504 Gateway Timeout.
    PHP Version 8.2.19
    J'utilise oci8
    Ma manière de requêter :
    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
    $conn = connexion(BDD,BDD_LOGIN,BDD_PASSWORD);
    if ($conn) {
    	$stmt = oci_parse($conn, $sql);
    	//si il y a des erreurs a l'execution
    	if(! oci_execute($stmt)){
    		$e = oci_error($stmt);
    		$erreur.='Erreur lors de l\'execution de la requete : '.$e['message']."\n";
    	} else {
    		oci_set_prefetch($stid, 1000);
    		$nrows = oci_fetch_all($stmt, $results);
    		//si la requete retourne des resultats
    		if ($nrows > 0) {
    			// pour chaque resultat
    			for($i=0;$i<$nrows;$i++){
    				....
    			}
    		}
    	}
    }else {
    	echo "<br>connexion impossible<br>";
    	$err = OCIError();
    	$erreur.='Erreur de connection Oracle : '.$err['message'];
    }
    oci_close($conn);
    Merci pour votre aide.

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 903
    Points : 6 685
    Points
    6 685
    Par défaut
    Tiré de la page du manuel PHP sur oci_set_prefetch:
    Il convient d'appeler la fonction oci_set_prefetch() avant la fonction oci_execute().
    Jette aussi un œil aux options disponibles pour oci_fetch_all, peut-être y en a t'il certaines mieux adaptées à ton besoin.

    Dans le code que tu montres, je ne vois rien de spécial d'autre. Le problème pourrait aussi se trouver dans la partie que tu as mise sous ellipse.

    Aussi, un foreach sur $results vaut mieux qu'une boucle for.

  3. #3
    Candidat au Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2017
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci CosmoKnacki,

    j'ai ajouté oci_set_prefetch avant chaque exécution, cela ne change rien.

    Le foreach n'améliore rien non plus.

    Ma page m'indique :

    DOMContentLoaded : 52.14 s
    Chargement : 52.14 s

    Je ne sais que faire de plus.

    Merci de votre aide.

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 903
    Points : 6 685
    Points
    6 685
    Par défaut
    Place des chronos dans ton code PHP pour isoler la partie en cause le plus précisément possible. (Si ça se trouve ça ne vient pas du tout de ta requête).

  5. #5
    Candidat au Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2017
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    j'ai mis des chronos et c'est "oci_execute" qui est long.

    Merci.

Discussions similaires

  1. gérer le clic gauche-droite en même temps de la sou
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 29/11/2002, 22h52
  2. Arrêter un prog si temps de connexion trop long
    Par jakouz dans le forum Langage
    Réponses: 4
    Dernier message: 22/10/2002, 18h28
  3. Réponses: 8
    Dernier message: 18/09/2002, 03h20
  4. temps d'un mp3
    Par CorO dans le forum Langage
    Réponses: 6
    Dernier message: 15/09/2002, 18h43
  5. repertoire temp dynamique
    Par killpilot dans le forum C
    Réponses: 2
    Dernier message: 26/04/2002, 16h19

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