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 :

Eviter d'exécuter 2 fois de suite la méthode PDO execute [PDO]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut Eviter d'exécuter 2 fois de suite la méthode PDO execute
    Bonsoir,

    mon code nécessite d'exécuter 2 fois la méthode execute sur la même requête SQL ; je pense que ce n'est pas top en matière de performance mais ne sais pas comment l'éviter. Quelqu'un pourrait-il me le dire ? Voici le code actuel :
    Code php : 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
    <?php
    $sql="SELECT * FROM categories ORDER BY categorie";
    $qid = $bdd->prepare($sql);
    $qid->execute();	
     
     $nb_lignes=0;
     while ($ligne=$qid->fetch(PDO::FETCH_ASSOC))	
    		$nb_lignes++;
      if ($nb_lignes > 0){
    	?>
    		<table>
    		<tr>
    		<td>Sélectionner la catégorie</td>
    		<td>
        		<form action="index.php?page=knowledge/knowledge_accueil?okcat" method="POST">
    			<select name="selectedcat">
    			<?php
    				$qid->execute();
    				for ($i=0;$i<$nb_lignes;$i++) {		
    					$ligne=$qid->fetch(PDO::FETCH_OBJ);	
    					$t = $ligne->categorie;
    			?>
    					<option><?php echo $t; ?> </option>
    			<?php } ?>
    		        </select>
    		</td>
    		<td><input type="submit" value="Ok"></td>		
    		</form>
    		</td></tr></table>
    <?php
    	}
    	else
    	{
    		echo "Aucune catégorie trouvée dans la base !<br>";
    	}

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Stocke le resultat de la requête dans une variable PHP et réutilise ce résultat au lieu de re-executer la requête.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Ou mieux : sépare la collecte des données de la gestion de l'affichage.
    Sinon, tu pourrais expliquer l'utilité d'une requête préparée dans le cas que tu montres ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  4. #4
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Excuse-moi, mais qu'est-ce que ça signifie séparer la collecte des données et l'affichage ?

    Sinon, ici, une requête préparée, vachement utile, c'est juste le résultat d'un copier-coller (en fait, chez moi, l'exécution d'une requête avec PDO est toujours préparée, mais c'est vrai que dans ce cas, il suffisait de faire :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $sql="SELECT * FROM categories ORDER BY categorie";
    $qid=$bdd->query($sql);

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    C'est une question assez similaire à ce que l'on essaye de faire dans les parties statiques d'un site : séparer la structure de la page (HTML) de la présentation (CSS) et de l'interactivité (JavaScript).
    Dans ton projet PHP, c'est pareil, il faut éviter d'avoir de l'affichage en plein milieu du traitement d'une requête.
    Essaye plutôt de récupérer les données à afficher dans des variables lors du traitement et ensuite de gérer l'affichage en utilisant ces variables.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Merci, voici ce que j'ai fait :
    Code php : 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
     
    	$sql="SELECT * FROM categories ORDER BY categorie";
    	$qid=$bdd->query($sql);
     
    	$nb_lignes=0;
     
    	 while ($ligne=$qid->fetch(PDO::FETCH_OBJ)){	
    			$nb_lignes++;
    			$t[]=$ligne->categorie;
    			}
    	 if ($nb_lignes > 0)
    	{
    	?>
    		<table>
    		<tr>
    		<td>Sélectionner la catégorie</td>
    		<td>
        		<form action="index.php?page=knowledge/knowledge_accueil?okcat" method="POST">
    			<select name="selectedcat">
    			<?php
    				for ($i=0;$i<$nb_lignes;$i++) {		
    			?>
    					<option><?php echo $t[$i]; ?> </option>
    			<?php } ?>

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

Discussions similaires

  1. [Système] Instruction PHP s'exécutant 2 fois de suite
    Par saluts92 dans le forum Langage
    Réponses: 1
    Dernier message: 12/02/2007, 21h24
  2. Script qui s'exécute 2 fois!
    Par franculo_caoulene dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 07/12/2005, 09h48
  3. Eviter l'exécution multiple d'un prg en mode console
    Par camboui dans le forum Windows
    Réponses: 3
    Dernier message: 29/07/2005, 12h23
  4. [Test][Perf]Mesure du temps d'execution différente 2 fois de suite
    Par debdev dans le forum Tests et Performance
    Réponses: 11
    Dernier message: 22/07/2005, 12h04
  5. impossible de lire 2 fois de suite un fichier
    Par porcher dans le forum C++
    Réponses: 8
    Dernier message: 14/02/2005, 01h44

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