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 :

scinder en 2 fonctions


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Par défaut scinder en 2 fonctions
    bonjour
    j'ai fait une fonction de ce genre avec un bloc de requete et un autre bloc qui stocke dans un tableau array.
    J'aimerais savoir s'il est possible de créer 2 fonctions :la 1eme pour la requete et la 2em pour stocker dans un array.
    En effet j'ai plusieurs requetes à faire ,mon but est d'appeler la meme fonction qui stocke les données générées par les requetes différentes.
    ce serait encore mieux si on peut faire celà sous forme de class php mais là çà me dépasse encore plus
    merci d'avance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function boxe_select_promo($lim=9){
    		$req="select".SELECT_P." from " . TABLE_PRODUCTS . " p left join " . TABLE_PRODUCTS_DESCRIPTION . " pd on p.products_id = pd.products_id left join " . TABLE_SPECIALS . " s on p.products_id=s.products_id where p.products_status = '1'";
    		$req = tep_db_query($req);
    		while ($prod = tep_db_fetch_array($req)) {	
    				$prod_list[] = array(
    						'price'=>$prod['products_price'],
    						'qty'=>$prod['products_quantity'],
    						);
    	    }// fin while
     
    		return $prod_list;	
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    		$req="select".SELECT_P." from " . TABLE_PRODUCTS . " p left join " . TABLE_PRODUCTS_DESCRIPTION . " pd on p.products_id = pd.products_id left join " . TABLE_SPECIALS . " s on p.products_id=s.products_id where p.products_status = '1'";
    		$req = tep_db_query($req);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    		while ($prod = tep_db_fetch_array($req)) {	
    				$prod_list[] = array(
    						'price'=>$prod['products_price'],
    						'qty'=>$prod['products_quantity'],
    						);
    	    }// fin while

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Hello

    Je vais tenter de te donner une piste en utilisant PDO:
    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
     
    function fetch_data_case_1 ($fetch_mode = PDO::FETCH_ASSOC)
    {
        $query = "SELECT * FROM table1";
        if ($results = PDO::query($query))
        {
             return $results->fetchAll($fetch_mode);
        }
        return false;
    }
     
    function fetch_data_case_2 ($fetch_mode = PDO::FETCH_ASSOC)
    {
        $query = "SELECT * FROM table2";
        if ($results = PDO::query($query))
        {
             return $results->fetchAll($fetch_mode);
        }
        return false;
    }
     
    function display_data ($data)
    {
        $res = "";
        foreach ($data as $row)
        {
             $res .= implode(';', $row) . '\n';
        }
        return $res;
    }
     
    display_data(fetch_data_case_1());
    display_data(fetch_data_case_2());
    Comme tu peux le voir c'est assez basique, est ce que ça convient à ton usage ?

    Note: Je te recommande sincèrement l'extension PDO, avec si possible une classe Database qui est un singleton de PDO (voir: http://tonylandis.com/php/php5-pdo-singleton-class/)

    Voir:
    http://php.net/manual/en/book.pdo.php
    http://www.php.net/manual/en/pdostatement.fetchall.php
    http://www.php.net/manual/en/pdo.query.php

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Par défaut
    oh là c'est balèze çà.
    apparemment ca ne marche que sur PHP5.
    je vais tester pour voir

  4. #4
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    En effet PDO c'est pour PHP5.

    Tu peux partir sur un comportement classique avec de bêtes boucles:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $query = "SELECT machin FROM truc";
    if ($results = mysql_query($query))
    {
        $res = array();
        while ($row = mysq_fetch_assoc($results)) $res[] = $row;
        return $res;
    }
    C'est moins rapide que le fetchAll de PDOStatement mais ça le fait.
    Au passage, si tu peux passer PHP de la version 4 à la dernière 5.3 fais-le, le gain de perfromance est x5 !

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    En effet PDO c'est pour PHP5.

    Tu peux partir sur un comportement classique avec de bêtes boucles:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $query = "SELECT machin FROM truc";
    if ($results = mysql_query($query))
    {
        $res = array();
        while ($row = mysq_fetch_assoc($results)) $res[] = $row;
        return $res;
    }
    C'est moins rapide que le fetchAll de PDOStatement mais ça le fait.
    Au passage, si tu peux passer PHP de la version 4 à la dernière 5.3 fais-le, le gain de perfromance est x5 !
    merci pour test conseils ,comment ce fait t'il qu'il y a un gain de performance si importante entre ces 2 facons de coder?

  6. #6
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Pour te représenter le gain de performances, tu peux faire la comparaison entre une fonction implode et une boucle qui fait la même chose mais écrit en php: implode ira beaucoup plus vite car elle est compilée dans le moteur Zend. C'est pareil pour PDO.

    Pour les perfs de php en lui même:
    Je n'ai jamais été regarder dans le détail du moteur Zend (c'est le moteur interne de PHP) mais de PHP 4 à PHP 5 il y a eu des optimisation majeures comme l'utilisation des opcodes (de la précompilation du code source) et un analyseur syntaxique plus inteligent et plus performant.

    Et il y aura encore un gain x2 à la prochaine version (PHP 6). Il faut dire qu'en terme de performances, on revient de loin en PHP

    A lire sur le sujet: http://en.wikipedia.org/wiki/PHP#Speed_optimization

Discussions similaires

  1. [PHP 5.0] [Tableaux] Fonction scinder un array en 2 array égaux
    Par okoweb dans le forum Langage
    Réponses: 1
    Dernier message: 24/03/2009, 12h22
  2. fonction pour scinder un tableau en plusieurs parties
    Par HoB dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 08/04/2008, 15h46
  3. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 16h19
  4. fonction printf
    Par ydeleage dans le forum C
    Réponses: 7
    Dernier message: 30/05/2002, 11h24
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 20h07

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