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

Langage PHP Discussion :

utiliser la fonction mysql_free_result


Sujet :

Langage PHP

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 468
    Points : 5 826
    Points
    5 826
    Billets dans le blog
    1
    Par défaut utiliser la fonction mysql_free_result
    Bonsoir,

    je suis obligé d'utiliser cette fonction car j'ai ça :
    Warning: Unknown: 1 result set(s) not freed. Use mysql_free_result to free result sets which were requested using mysql_query() in Unknown on line 0
    et si je l'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_free_result($res);
    où à la fonction, je passe bien l'identifiant récupéré après la connection, j'ai ce warning :
    Warning: mysql_free_result(): supplied resource is not a valid MySQL result resource in /homepages/20/d357470176/htdocs/telepamedia/annonce1/connect.php on line 26
    que puis-je faire ?

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    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
    Points : 7 762
    Points
    7 762
    Par défaut
    Hello

    J'imagine que l'erreur est levée car tu manipule des jeux de résultats renvoyés par une procédure je me trompe ? Peux-tu nous montrer la requête que tu execute ? Fais également un var_dump de $res pour contrôler son type et vérifier s'il n'est pas false à tout hasard...

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 468
    Points : 5 826
    Points
    5 826
    Billets dans le blog
    1
    Par défaut
    Je te montre ce qui à mon avis est utile :
    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 connect()
    {
    include_once("config.php");
    $id_conn=mysql_connect(MYHOST,MYUSER,MYPASS);
    mysql_select_db(DBNAME,$id_conn);
     
     
    return($id_conn);
    }
     
    function free_memory($res)
    {
    echo 'var_dump : ';
    var_dump($res);
    mysql_free_result($res);
    }
     
    include_once("config.php");
    include_once("connect.php");
    $id_conn = connect();
    ...
    free_memory($id_conn);
    et le retour du var_dump :
    var_dump : resource(4) of type (mysql link)

  4. #4
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    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
    Points : 7 762
    Points
    7 762
    Par défaut
    Ce n'est pas sur la ressource de connection qu'il faut faire un mysql_free_result mais sur la ressource de résultats renvoyée par mysql_query.

    Logiquement ça donne ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $connection = mysql_connect(...);
    $results = mysql_query("...", $connection);
    mysql_free_result($results);
    mysql_close($connection);
    Les deux derniers appels ne sont pas mandataires, ces fonctions seront appelées nativement lorsque le script se finira de toute façon.

    Lis la doc: http://php.net/manual/fr/function.mysql-free-result.php
    Il est clairement stipulé qu'on doit passer une ressource de résultat à mysql_free_result.

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 468
    Points : 5 826
    Points
    5 826
    Billets dans le blog
    1
    Par défaut
    Merci de ton conseil.
    D'abord, une question : à mysql_query, je ne lui passe que la requête SQL, pas l'identifiant de connection (c'est optionnel) : est-ce OK ?
    Sinon, dans mon script, il y a 3 mysql_query, donc je les libère tous les 3, je n'ai plus l'erreur qui demande de libérer les ressources mais j'avais encore un warning sur l'appel de mysql_free_result. Donc, j'ai mis un @ devant et c'est réglé.
    (Il me disait encore que je passais autre chose qu'une ressource mysql à la fonction...)

  6. #6
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    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
    Points : 7 762
    Points
    7 762
    Par défaut
    Donc, j'ai mis un @ devant et c'est réglé
    Tu parles Toi tu es du genre à mettre un auto-collant sur le voyant moteur de ta voiture quand il s'allume non ?
    Essaie plutôt de trouver l'origine du probleme, si tu nous faisait voir les requêtes que tu exécutes ?

    Sinon, dans mon script, il y a 3 mysql_query, donc je les libère tous les 3
    Sauf cas particulier (notamment avec les procédure stockées - voir mon premier post dans ce thread) l'usage de mysql_free_result n'est pas nécéssaire.

    D'abord, une question : à mysql_query, je ne lui passe que la requête SQL, pas l'identifiant de connection (c'est optionnel) : est-ce OK ?
    Oui c'est ok tant que tu ne jongle pas avec plusieurs connexions.

  7. #7
    Expert éminent sénior

    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
    Points : 10 726
    Points
    10 726
    Par défaut
    t'as cette erreur parce que t'as le trace_mode d'activé, le @ est une mauvaise solution tu préfères supprimer l'erreur plutôt que la corrigé, un petit tour rapide sur la doc de la fonction mysql_free_result et t'aurai compris le pourquoi du comment.

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 468
    Points : 5 826
    Points
    5 826
    Billets dans le blog
    1
    Par défaut
    en effet ; j'ai désactivé le trace mode, retiré le @ et laissé le mysql_free_result uniquement quand il le fallait et ça marche nickel. Bon je me recouche car je n'ai que 4 heures de sommeil

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 468
    Points : 5 826
    Points
    5 826
    Billets dans le blog
    1
    Par défaut
    J'ai fait une petite modif sue la page, donc l'ai retransférée, et j'ai de nouveau le warning (et je ne libère que le "select", pas le "insert", ni le "update") ; donc la seule solution pour l'instant est de mettre un @ devant la fonction : comment puis-je faire mieux ?

  10. #10
    Expert éminent sénior

    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
    Points : 10 726
    Points
    10 726
    Par défaut
    met le mysql_free_result a chaque fois qu'il te dit d'en mettre un

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 468
    Points : 5 826
    Points
    5 826
    Billets dans le blog
    1
    Par défaut
    Comme il n'en restait qu'un, je viens de le retirer (ainsi aue le @) et pour l'instant, plus de warning ni d'erreur...

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

Discussions similaires

  1. [ASP] Utiliser la fonction PAD
    Par Hell dans le forum ASP
    Réponses: 4
    Dernier message: 31/03/2005, 16h23
  2. manuel d'utilisation de fonction
    Par SteelBox dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 11/10/2004, 01h28
  3. Utiliser des fonctions Pascal
    Par Neilos dans le forum C++Builder
    Réponses: 2
    Dernier message: 07/03/2004, 15h43
  4. Réponses: 11
    Dernier message: 22/12/2003, 21h06
  5. impossible d'utiliser ma fonction dans un insert
    Par caramel dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/04/2003, 15h04

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