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 :

Plusieurs requetes en PHP/MySQL [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Avatar de ArKam
    Inscrit en
    Mars 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2007
    Messages : 528
    Par défaut Plusieurs requetes en PHP/MySQL
    Bien le bonjour,

    Je cherche à faire des statistics sur des valeurs enregistrées sur une DB.

    Malheureusement, je ne connais pas de moyen de faire plusieurs requêtes en une seul, et c'est pourquoi j'ai tenté la chose suivante:

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    <?php
     
    //Déclaration des variables:
     
    $dbHost="localhost";
    $username="root";
    $password="toor";
    $database="TST_DB";
     
    // Requetes SQL:
     
    // total de connexions:
    $numRequests="SELECT count(*) FROM access_log WHERE action LIKE 'TCP%'";
     
    // Nombres de connexions en cache:
    $numRequestsCache="SELECT count(*) FROM access_log WHERE action LIKE 'TCP%'";
     
    // Pourcentage de connexions en cache:
    $percentRequestsCache="SELECT count(*) FROM access_log WHERE action LIKE 'TCP%'";
     
    // Connexion à la base de donnée
     
    $mysqlConnect=@mysql_connect($host,$username,$password);
    mysql_select_db($database,$mysqlConnect);
     
    // Execution et traitement des requetes:
    $numRequestsQuery=@mysql_query($numRequests);
    	while ($row = mysql_fetch_array($numRequestsQuery, MYSQL_NUM)) {
      			return $totalRequests=$row['0'];
    			break;
    	}
     
    // Deconnexion de la base de donnée:
    mysql_close($mysqlConnect);
     
    // Connexion à la base de donnée
     
    $mysqlConnect=@mysql_connect($host,$username,$password);
    mysql_select_db($database,$mysqlConnect);
     
    // Execution et traitement des requetes:
    $numRequestsCacheQuery=@mysql_query($numRequestsCache);
    	while ($row = mysql_fetch_array($numRequestsCacheQuery, MYSQL_NUM)) {
      			return $totalRequestsCache=$row['0'];
    			break;
    	}
    // Deconnexion de la base de donnée:
    mysql_close($mysqlConnect);
     
    // Connexion à la base de donnée
     
    $mysqlConnect=@mysql_connect($host,$username,$password);
    mysql_select_db($database,$mysqlConnect);
     
     
    // Execution et traitement des requetes:
    $percentRequestsCacheQuery=@mysql_query($percentRequestsCache);
    	while ($row = mysql_fetch_array($percentRequestsCacheQuery, MYSQL_NUM)) {
      			return $totalRequestsPercent=$row['0'];
    			break;
    	}
    ?>
    Le problème est que ça ne fonctionne pas, en fait, seul la première requête est correctement exécuté, les autres non.

    Je me demande comment je pourrais faire ce que je cherche à faire

  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
    C'est 3 fois la meme requete non ?

    Il est inutile de fermer la connexion après chaque requête.

    A quoi servent tes return et tes break ?

    C'est une mauvaise idée de cacher les erreurs, surtout quand on debug.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre chevronné Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste Développeur Web - Fizzup.com
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Par défaut
    Il me semble que l'on ouvre une connexion mysql, mais on ne la ferme pas.

    en gros:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $mysqlConnect=@mysql_connect($host,$username,$password);
    mysql_select_db($database,$mysqlConnect);
     
    //requete1
    //requete2
    etc...
     
    //---sans fermer la connexion. Ca se fait automatiquement
    edit:grillé sur les connexions mysql.

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 313
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 313
    Billets dans le blog
    17
    Par défaut
    Le problème est que ça ne fonctionne pas
    1. Retire les @ qui te cachent les erreurs et gênent le débugage ;
    2. Tes 3 requêtes sont identiques, normal ?
    3. Tu as $row = mysql_fetch_array($numRequestsQuery, MYSQL_NUM) puis $totalRequests=$row['0'], or $row est un tableau dont les index sont des entiers, pas des chaînes ;
    4. Pas besoin de fermer/ouvrir la cnx à MySQL pour chaque requête : ouvre-la avant ta 1re requête et ferme-la quand tu n'as plus besoin de MySQL.

    Edit : grilled

  5. #5
    Membre éclairé
    Avatar de ArKam
    Inscrit en
    Mars 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2007
    Messages : 528
    Par défaut
    Pour le break c'est rien c'était un test.

    J'ai trois fois la meme requete pour des raisons de tests.

    Maintenant, si je fait ça:

    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
     
    <?php
     
    //Déclaration des variables:
     
    $dbHost="localhost";
    $username="root";
    $password="toor";
    $database="TST_DB";
     
    // Requetes SQL:
     
    // total de connexions:
    $numRequests="SELECT count(*) FROM access_log WHERE action LIKE 'TCP%'";
     
    // Nombres de connexions en cache:
    $numRequestsCache="SELECT count(*) FROM access_log WHERE action LIKE 'TCP%'";
     
    // Pourcentage de connexions en cache:
    $percentRequestsCache="SELECT count(*) FROM access_log WHERE action LIKE 'TCP%'";
     
    // Connexion à la base de donnée
     
    $mysqlConnect=@mysql_connect($host,$username,$password);
    mysql_select_db($database,$mysqlConnect);
     
    // Execution et traitement des requetes:
    $numRequestsQuery=@mysql_query($numRequests);
    $numRequestsCacheQuery=@mysql_query($numRequestsCache);
    $percentRequestsCacheQuery=@mysql_query($percentRequestsCache);
     
    //Traitement des données SQL:
    	while ($row = mysql_fetch_array($numRequestsQuery, MYSQL_NUM)) {
      			return $totalRequests=$row['0'];
    	}
     
    	while ($row = mysql_fetch_array($numRequestsCacheQuery, MYSQL_NUM)) {
      			return $totalRequestsCache=$row['0'];
    	}
     
    	while ($row = mysql_fetch_array($percentRequestsCacheQuery, MYSQL_NUM)) {
      			return $totalRequestsPercent=$row['0'];
    	}
    ?>
    je n'ai toujours qu'une seul valeur.

    Les returns sont la pour exporter la variable car c'est un second script qui vas se charger de la mise en page des données.

    Après avoir lu sur le net plusieurs sujets, apparemment il n'est pas possible de faire plusieurs requêtes en MYSQL.

    Vous auriez déjà entendu ça?

  6. #6
    Membre éclairé
    Avatar de ArKam
    Inscrit en
    Mars 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2007
    Messages : 528
    Par défaut
    Citation Envoyé par Séb. Voir le message
    1. Retire les @ qui te cachent les erreurs et gênent le débugage ;
    2. Tes 3 requêtes sont identiques, normal ?
    3. Tu as $row = mysql_fetch_array($numRequestsQuery, MYSQL_NUM) puis $totalRequests=$row['0'], or $row est un tableau dont les index sont des entiers, pas des chaînes ;
    d
    Oui c'est normal pour les requetes comme éxpliqué plus haut

    Pour ce qui est du tableau, ici je donne à ma variable la valeur de l'index0 et ça fonctionne tres bien, j'ai bien un string, je ne comprend donc pas ta phrase?

  7. #7
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 313
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 313
    Billets dans le blog
    17
    Par défaut
    Les returns sont la pour exporter la variable car c'est un second script qui vas se charger de la mise en page des données.
    La suite ne sera donc pas exécutée.

    Après avoir lu sur le net plusieurs sujets, apparemment il n'est pas possible de faire plusieurs requêtes en MYSQL.
    Ben non.

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 313
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par ArKam Voir le message
    Oui c'est normal pour les requetes comme éxpliqué plus haut
    J'ai relu je ne vois rien expliquant l'utilité ou la nécessité d'avoir 3 requêtes identiques à la suite.

    Pour ce qui est du tableau, ici je donne à ma variable la valeur de l'index0 et ça fonctionne tres bien, j'ai bien un string, je ne comprend donc pas ta phrase?
    Ah oui ceci fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
     
    $a[0] = 'salut' ;
    echo $a['0'] ;
    Sympa PHP Donc tu peux oublier ma remarque à ce sujet postée plus haut

  9. #9
    Membre éclairé
    Avatar de ArKam
    Inscrit en
    Mars 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2007
    Messages : 528
    Par défaut
    Bon alors je crois que je suis sur une piste

    Si je vire les return et que je met un echo, j'ai bien ce que je veux.

    De plus, j'ai pu virer la boucle while, qui pour le coup, ne servait donc pas à grand choses

    T'as vue, c'est cool PHP hein !!

    DONC,

    Pourrais tu me dire pourquoi le return bloque le script?

    Edit: OK j'ai compris pour les return, ils ne s'utilisent qu'avec une fonction, qui elle vas finir à un moment donné

    PS: Pourquoi dans les exemples PHP ils utilisent une boucle while?
    Si on utilise $valeur=$row['$i'] je comprend mais pour juste afficher une valeur dont on connait l'index ça ne sert à rien non?

  10. #10
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 313
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 313
    Billets dans le blog
    17
    Par défaut
    Pourrais tu me dire pourquoi le return bloque le script?
    C'est son rôle. Il arrête le script ou la fonction et retourne une valeur.

    PS: Pourquoi dans les exemples PHP ils utilisent une boucle while?
    Parce que très souvent on récupère plusieurs enregistrements. La boucle sert alors à parcourir le jeu d'enregistrements 1 à 1.

    Si on utilise $valeur=$row['$i'] je comprend mais pour juste afficher une valeur dont on connait l'index ça ne sert à rien non?
    Oui, et mieux on peut nommer les champs retournés.

  11. #11
    Membre éclairé
    Avatar de ArKam
    Inscrit en
    Mars 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2007
    Messages : 528
    Par défaut
    La boucle est donc belle et bien la pour ce que je pensais :-D

    Merci pour les tuyaux, ça fonctionne bien mieux maintenant.

    Je vais faire mon code à l’arrache pour l'instant, et je ferais de l'objet une fois le site fini, comme ça j'aurais bien compris les tenants et aboutissants de celui-ci.

    Mici

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

Discussions similaires

  1. [MySQL] recherche d'un mot cle vers plusieurs tables en php Mysql
    Par NapsterVB dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 08/09/2013, 18h01
  2. Un formulaire en plusieurs pages en PHP/MySQL
    Par sagitarium dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 25/05/2006, 18h58
  3. [php/mysql]Controle de requete dans un champ de saisie
    Par rdams dans le forum Requêtes
    Réponses: 6
    Dernier message: 28/03/2006, 10h57
  4. probleme de requete php/mysql
    Par ph_anrys dans le forum Requêtes
    Réponses: 5
    Dernier message: 06/03/2006, 15h26
  5. requete php mysql
    Par calitom dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/02/2006, 16h24

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