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 :

requete dans une fonction sql [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre extrêmement actif Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Par défaut requete dans une fonction sql
    bonjour

    page fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function RequeteRencontre($cat,$rankLocaux,$rankVisiteurs,$saison,$SelectionParEquipe,$Order)
    {
    	$sqlEffectue = "[...]";
    	$reqEffectue = mysql_query($sqlEffectue) or die('Erreur SQL : <br />'.$sqlEffectue);
    	global $reqEffectue;
     
    }
    page d'affichage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    RequeteRencontre($cat,$rankLocaux,$rankVisiteurs,$saison,$SelectionParEquipe,$Order);
     
    	//Pas de résultat
    	if (mysql_num_rows($reqEffectue) == 0) [...]
    me renvoie
    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource
    pourquoi?

    Merci pour vos réponses ...

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    le global au le faire au début de la fonction, d'ailleurs de te déconseiller d'utiliser global, ainsi que de faire un or die comme ca en plein milieux d'une fonction, je tu veux voir les erreurs de mysql active le mysql.trace_mode, vérifie aussi des résultats la y'a rien

  3. #3
    Membre extrêmement actif Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Par défaut
    oui, mais ça ne craint rien je suis en local

    il faut mettre global au début de ma fonction alors?

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par ledisciple Voir le message
    oui, mais ça ne craint rien je suis en local

    il faut mettre global au début de ma fonction alors?
    c'est pas une question de craindre quelque chose, c'est une question de bonne pratique

    sinon oui mais le global au debut

  5. #5
    Membre extrêmement actif Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Par défaut
    je l'avais toujours vu à la fin, enfin c'est ce que je pensais

    Merci

  6. #6
    Membre extrêmement actif Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Par défaut prolongation
    Je reviens vers vous car j'ai un autre soucis qui découle de mon premier post

    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
    page fonction :
     
    function RequeteRencontre($cat,$rankLocaux,$rankVisiteurs,$saison,$SelectionParEquipe,$Order)
    {
    global $reqEffectue;
    global $sqlEffectue;
    	$sqlEffectue = "[...]";
    	$reqEffectue = mysql_query($sqlEffectue) or die('Erreur SQL : <br />'.$sqlEffectue);
    }
     
    page php
     
    while($data = mysql_fetch_array($reqEffectue)) 
    {		{ 
    echo $data[...]
    }
     
    $reqEffectue = mysql_query($sqlEffectue) or die('Erreur SQL : <br />'.$sqlEffectue);
     
    while($data = mysql_fetch_array($reqEffectue)) 
    {		{ 
    echo $data[...] // d'autres data évidemment
    }
     
    //me renvoi Notice: Undefined variable: sqlEffectue pour le deuxième while

  7. #7
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Il doit avoir une erreur à mon sens.

    A savoir que mysql_query() renvoie soit une ressource, soit FALSE, voir même TRUE pour une requête de type insert, delete, update.
    Donc normalement il est préférable de vérifier ça.

    Si on prend l'exemple dans la doc Php, il y a ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $result = mysql_query('SELECT * WHERE 1=1');
    if (!$result) {
        die('Requête invalide : ' . mysql_error());
    }
    En somme, il vaut mieux éviter de lancer une boucle sans même savoir si en amont ça c'est bien passé ou pas.


    Question comme ça. Tu fais 2 boucles qui ont l'air d'exploiter la même ressource, du coup, est ce la même requête ou pas ?

  8. #8
    Membre extrêmement actif Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Question comme ça. Tu fais 2 boucles qui ont l'air d'exploiter la même ressource, du coup, est ce la même requête ou pas ?
    Pour être précis, je fais tourner un première fois ma requête pour récupérer une parties des données, les transformer et les afficher ( la sommes de chiffres de plusieurs tables)

    cette partie ce passe très bien

    Le problème c'est que je n'arrive pas à à refaire tournée ma requête une deuxième fois pour récupérer l'autre partie des données.
    //me renvoi
    Notice: Undefined variable: sqlEffectue pour le deuxième while

  9. #9
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Le problème c'est que je n'arrive pas à à refaire tournée ma requête une deuxième fois pour récupérer l'autre partie des données.
    Pourquoi donc parcourir 2 fois les mêmes données, car théoriquement ce sont les mêmes.
    Ca ne sert à rien de solliciter la Bdd comme, il y a plus simple, et plus rapide théoriquement.

    Effectue la boucle 1 fois, et fais ce qu'il y a à faire d'une traite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while($data = mysql_fetch_array($reqEffectue)) {
        // On effectue les traitements de la 1ère partie
     
        // On effectue ceux de la 2ème
    }
    Si ceci te parais pas simple, alors une autre façon consiste de stocker toutes les données dans un 1er temps dans un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    while($data = mysql_fetch_array($reqEffectue)) {
        $donnees[] = $data; 
    }
    Ensuite, on pourra exploiter le tableau $donnees autant de fois qu'il est nécessaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    foreach (donnees as valeur) {
        echo $valeur['nom_du_champ'];
    }
    A savoir aussi qu'il est possible de faire certaines manips du coté de la requête, comme faire un calcul, fusionner/concaténer des valeurs de champs, formatage de date, etc, etc ...
    Ca peu éviter des traitements en Php.



    A coté de ça, si l'erreur Php dit que la ressource $reqEffectue n'est plus valide, c'est qu'entre la fin de la 1ère boucle et le début de la 2ème il doit avoir une erreur qui par exemple la détruirait.
    Il n'y aurait pas un mysql_close() ou mysql_free_result() par hasard ?
    Les fonctions mysql_* je ne les utilisent plus depuis longtemps, je ne sais plus trop, mais je doute qu'au bout du 1er parcourt MySQL détruit la ressource, on doit pouvoir la ré-exploiter, ça me semble pas normal quand même.
    Tu pourrais faire des echo $reqEffectue après la 1ère boucle, puis en rajouter à des points/lignes différentes pour savoir à quel moment cette ressource est perdue, du coup quel code provoquerait ça.
    Bref, faire du débogage.

  10. #10
    Membre extrêmement actif Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Par défaut
    Au final, j'ai placé ma requête dans une page .inc.php. j'ai protégé l'accès à mes .inc par htaccess et par une fonction qui analyse l'adresse entrée avant d'afficher la page. Bon pour la fonction, c'est un basique ( je ne cache pas les secrets du monde)

    C'est grave docteur?

    Sinon, j'ai besoin de parcourir deux fois mon tableau, car j'ai besoin d'une analyse avant d'afficher les données.

    Plus clairement, c'est pour afficher le nombre de victoires etc ...

    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
    $victory = 0;
    	$defeat =0;
    	$draw = 0;
     
    	while($data = mysql_fetch_array($reqEffectue)) 
    		{ 
     
    		////////////////////////////////////////////////////////////
     
    		$definirResultats = array('num_locaux_rencontre','num_visiteurs_rencontre');
     
    		foreach ($definirResultats as $defini)
    		{
    			if ($_SESSION['numequipecorrect'] == $data[$defini])
    			{
    				if ( ($data['but_local'] > $data['but_visiteur']) || ($data['tab_local'] > $data['tab_visiteur']) )
    				{
    					$victory++;
    				}
    				if ( ($data['but_local'] < $data['but_visiteur']) || ($data['tab_local'] < $data['tab_visiteur']) )
    				{
    					$defeat++;
    				}
    				if ( ($data['but_local'] == $data['but_visiteur']) &&  (empty($data['tab_local']) && empty($data['tab_visiteur'])) && (!is_null($data['but_local']) && !is_null($data['but_visiteur'])) )
    				{
    					$draw++;
    				}
    			}
    		}
    echo $victory [...]
    c'est pour ça que j'aurai voulu faire une deuxième boucle avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while($data = mysql_fetch_array($reqEffectue))
    pour afficher le nom ,des équipes ...

    du coup depuis que j'ai placé ma requête dans une page .inc mes deux boucles marchent impeccablement

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

Discussions similaires

  1. Appel d'une fonction dans une fonction (sql server 2005)
    Par catchouse dans le forum Développement
    Réponses: 10
    Dernier message: 06/05/2009, 12h03
  2. Problème Requete dans une fonction ?
    Par Mr-Chikhi dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 13
    Dernier message: 29/04/2009, 16h48
  3. condition dans une fonction SQL
    Par schwarzy2 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 23/02/2009, 11h36
  4. Create table dans une fonction SQL
    Par mimi0501 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/02/2008, 13h25
  5. déclarer une table dans une fonction SQL
    Par bicho dans le forum VB.NET
    Réponses: 3
    Dernier message: 19/03/2007, 14h11

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