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 :

Une fonction perso pour aléger le code...


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Points : 73
    Points
    73
    Par défaut Une fonction perso pour aléger le code...
    Bonsoir tout le monde,

    Je me suis apperçu en reproduisant fréquemment des lignes de codes identiques (souvent à l'aide de Ctrl+C, Ctrl+V ) pour traiter des requêtes en notamment combien cela pouvait être répétitif et surtout lourd Sans compter que ça complique drôlement la source de mes pages

    Du coup, j'ai pensé à utiliser une fonction qui, lorsqu'on l'appele, pourrait se charger de répéter un code assez classique. La voici :

    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
    <?php
    function function_mysql($query)
    {
    	$mysql_user='root';
    	$mysql_pass='';
    	$mysql_address='192.168.1.51';
    	$mysql_database='lisa';
    	@mysql_connect($mysql_address,$mysql_user,$mysql_pass) or die('<h1 class="error">Impossible de se connecter &agrave; la base MySQL</h1>');
    	@mysql_select_db($mysql_database) or die('<h1>Erreur lors de la s&eacute;lection de la base de donn&eacute;e <code>'.$mysql_database.'</code></h1>');
     
    	$result=mysql_query($query) or die('<h1 class="error">Erreur My<abbr title="Structured Query Language" lang="en">SQL</abbr></h1><ul><li>Requ&ecirc;te invalide : '.mysql_error().'</li><li>Requ&ecirc;te compl&egrave;te : '.$query.'</li></ul>');
    	$nb=mysql_num_rows($result);
    	mysql_close();
    	return($result);
    }
    ?>
    Cependant, il reste encore à ajouter ceci (par exemple) pour l'appeler et faire fonctionner l'ensemble :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $query='SELECT `nom_forum` FROM `forum` WHERE `numero_forum`=1';
    while($row=mysql_fetch_array(function_mysql($query);))
    {
    	echo $row['nom_forum'];
    }
    ?>
    Vous l'avez remarqué, ça n'est pas encore l'idéal
    A vrai dire, je n'ai pas réussi à structurer la fonction function_mysql(); de telle facon à ce qu'il ne reste plus qu'à récupérer les résultats via par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    $tableau[]=function_mysql('SELECT `nom_forum` FROM `forum` WHERE `numero_forum`=1');
    echo $tableau['nom_forum'][0];
    ?>
    ...Où [0] indiquerais la 1ère (et en l'occurrence unique) ligne retournée. Car en effet, il me semble que pour y arriver, une solution pourrait être de faire retourner un tableau par la fonction dont la structure ressemblerait à ça : $tableau['nom_d_un_champ']['numero_de_la_ligne'] pour qu'ainsi, il soit possible de savoir combien de lignes ont été retournées (car c'est parfois important à savoir), en tenant compte du fait que l'on ne puisse pas faire retourner deux valeurs via une fonction.
    De cette manière on évite de constamment rappeler while($row=mysql_fetch_array[...] outre l'appele à la fonction. Mais même si cela était fait, je ne vois pas bien comment en déduire que ['numero_de_la_ligne'] est égal à 8 par exemple.

    Bon, j'espère que mon sujet est clair et qu'il ne noiera personne de questions

    En vous souhaitant une bonne soirée

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 222
    Points
    8 222
    Billets dans le blog
    17
    Par défaut
    Il faudrait plutôt $tuples[n° de l'enregistrement]['champ auquel on veut accéder'].
    Exemple :

    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
    function query_fetch_all($sql) {
        $rs = mysql_query($sql) ;
        if ( $rs !== FALSE ) {
            $records = array( ) ;
            while ( $tuple = mysql_fetch_object($rs) ) {
                $records[ ] = $tuple ; // On empîle les enregistrements
            }
            return $records ;
        } else { // Erreur
             return FALSE ;
        }
    }
     
    $sql = 'SELECT ALL ...' ;
    $records = query_fetch_all($sql) ;
    if ( $rs === FALSE ) {
        // Erreur dans la requête
    } else {
        // Requête OK
        // Accès au champ my_field du 9e enregistrement
        echo $records[8]->my_field ;
    }
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Points : 73
    Points
    73
    Par défaut
    Merci pour l'info. Mais comment puis-je connaitre le nombre d'enregistrement (c'est à dire de lignes) que je pouvais obtenir via

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    $nb=mysql_num_rows($result);
    ?>
    ...Via une seule fonction ? Car avec :

    $tuples[n° de l'enregistrement]['champ auquel on veut accéder']
    ...Je peux accéder à tout ce que je veux mais je ne peux pas savoir par exemple qu'il n'y a que 16 enregistrement, ou 9 dans l'exemple plus haut.

  4. #4
    Membre confirmé Avatar de GregPeck
    Inscrit en
    Novembre 2005
    Messages
    530
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 530
    Points : 540
    Points
    540
    Par défaut
    count($tuples) non ? ou alors j'ai pas bien compris le code

  5. #5
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    stop stop stop !

    Si tu veux optimiser ton code, tres bien... mais surtout, n'inclue pas la fonction de connection a la base !!! mysql_connect n'a besoin d'etre appellée qu'une seule fois... et son temps d'execution est ENORME comparé a un mysql_query... je le sais pour avoir fait l'erreur sur mon site perso...

    apres optimisation, et un seul appel a mysql_connect, je suis passé de temps d'execution des pages de 10secondes a moins de 3s... enfin apres, si t'as du temps a perdre, tu te le vois ;o)

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Points : 73
    Points
    73
    Par défaut
    Dans ce cas je vais place le code de connexion à mysql en haut de mes pages uniquement, et sa déconnexion en bas lorsqu'il n'y a plus rien

    Je crois que count($tuples) compterait le nombre de valeurs, c'est à dire :
    le nombre d'enregistrement * le nombre de champ auquel on veut accéder

    En fait, l'idéal serait qu'avec la fonction :
    + le code des pages où des requêtes se trouvent soient le plus simple possible (en mettant un maximum de lignes récurrentes dans la fonction )
    + la fonction puisse retourner tous les résultats d'une requête de type SELECT
    + qu'elle retourne aussi le nombre d'enregistrement

    ...et ça fait beaucoup Mais peut-être que c'est possible à obtenir... enfin j'espère ^^

  7. #7
    Membre confirmé Avatar de GregPeck
    Inscrit en
    Novembre 2005
    Messages
    530
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 530
    Points : 540
    Points
    540
    Par défaut
    A mon avis
    count($tuples)
    renvoi le nb de lignes. Et si tu fait tu aura le nb de colonnes.

    Pour avoir le nombre de case (lignes * colonnes), tu l'auras en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    count($tuples) * count($tuples[0])

  8. #8
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 222
    Points
    8 222
    Billets dans le blog
    17
    Par défaut
    $records = query_fetch_all($sql) ;
    $n = count($records) ; // Nombre d'enregistrements
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  9. #9
    Membre confirmé Avatar de GregPeck
    Inscrit en
    Novembre 2005
    Messages
    530
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 530
    Points : 540
    Points
    540
    Par défaut
    Je ne trouve pas query_fetch_all pour mysql, j'ai l'impression que pour postgresql ou sqlite, tu confirme ?

Discussions similaires

  1. utiliser une fonction VOID pour des blocs relationnels ?
    Par ctobini dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 11/09/2006, 16h16
  2. Réponses: 8
    Dernier message: 29/06/2006, 15h37
  3. creation d'une fonction SQL pour generer du XML
    Par MuldyMath dans le forum Oracle
    Réponses: 3
    Dernier message: 07/06/2006, 11h22
  4. [C# 2.0] Une fonction parametrée en remplacement de code.
    Par Pierre8r dans le forum Windows Forms
    Réponses: 1
    Dernier message: 31/05/2006, 14h06
  5. Une fonction chmod pour dossier
    Par Anduriel dans le forum Langage
    Réponses: 2
    Dernier message: 15/01/2006, 13h17

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