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

PostgreSQL Discussion :

Erreur : pg_num_rows(): supplied argument is not a valid PostgreSQL result resource


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 66
    Par défaut Erreur : pg_num_rows(): supplied argument is not a valid PostgreSQL result resource
    Bonsoir à tous,

    débutant en PHP, je travaille sous Eclipse 3.2 avec le plug-in PHPEclipse sous Windows XP SP2. J'essaye d'accèder à la table CD (contenant 3 enregistrements) d'une base de données Postgresql (nommée elle aussi CD) comme suit :

    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
    <?php
    	$bd = pg_connect("host=localhost port=5432 dbname=CD user=postgres password=titi") or die("Sélection de la base de données impossible !<BR>");
     
    	if (!pg_connection_busy($bd)){
    	    pg_send_query($bd, "select * from CD; select count(*) from CD;");
    	}	
     
    	$res1 = pg_get_result($bd);
    	echo "Premier appel de pg_get_result() : $res1<BR>";
    	$rows1 = pg_num_rows($res1);
    	echo "$res1 a $rows1 enregistrements<BR><BR>";
     
    	$res2 = pg_get_result($bd);
    	echo "Second appel de pg_get_result() : $res2<BR>";
    	$rows2 = pg_num_rows($res2);
    	echo "$res2 a $rows2 enregistrements<BR>";
    ?>
    A l'exécution, j'obtiens le résultat suivant !

    Premier appel de pg_get_result() : Resource id #3
    Resource id #3 a 0 enregistrements

    Second appel de pg_get_result() :

    Warning: pg_num_rows(): supplied argument is not a valid PostgreSQL result resource in e:\program files\easyphp1-8\www\formation_php\test_postgresql.php on line 31
    a enregistrements
    Ma table CD contient réellement 3 enregistrements, pourtant le premier pg_num_rows en retourne 0 !

    Et apparemment le second pg_get_result ne retourne rien du tout (d'où le message d'erreur final) mais je ne comprends pas pourquoi !

    Y aurait-il une âme charitable pour m'expliquer où je me trompe ? Merci d'avance !

    Mafate

  2. #2
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Bonjour,

    pg_send_query() et pg_get_result() servent pour des requêtes asynchrones, c'est à dire que le script PHP continue à s'exécuter tandis que Postgres exécute la requête.

    Le problème ici est que la deuxième requête est envoyée alors que Postgres est encore à traiter la première. Il faut que tu fasses une boucle qui teste pg_connection_busy() avant de lancer une nouvelle requête. Visiblement, tu t'es inspiré de l'exemple fourni dans la doc PHP, dans lequel ces tests ne figurent pas.

    Je te déconseille toutefois d'utiliser les fonctions asynchrones, qui ne sont utiles que dans des cas assez particuliers. Utilise plutôt pg_query(), le code sera nettement plus simple.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 66
    Par défaut
    Bonjour GrandFather,

    merci beaucoup pour ta réponse ! Je vais essayer cela ce soir, j'ai hâte d'aller boucler !

    Bonne journée,

    Mafate

    PS. : je vois que tu es modérateur. Je te signale que dans un second temps j'ai posté cette question sur un autre forum du site (ici) parce que l'endroit me semblait plus approprié. Désolé pour le doublon, je ne suis pas encore très habitué à developpez.net !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 66
    Par défaut
    Euh, je pense à quelque chose d'un coup : je comprends bien avec ton explication que ma seconde requête ne fonctionne pas mais comment expliquer que le pg_num_rows de ma première requête me retourne 0 ligne au lieu des 3 présentes dans ma table ??

    Merci,

    Mafate

  5. #5
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Citation Envoyé par Mafate
    Euh, je pense à quelque chose d'un coup : je comprends bien avec ton explication que ma seconde requête ne fonctionne pas mais comment expliquer que le pg_num_rows de ma première requête me retourne 0 ligne au lieu des 3 présentes dans ma table ??
    Sans doute pace que cette fonction se sert de ce que renvoie pg_get_result(), et que cette fonction est appelée alors que Postgres n'a pas terminé de traiter la requête (le script PHP s'exécute plus rapidement que la requête SQL n'est traitée). Il faut donc vérifier avant pg_connection_busy(). Tout cela pour dire qu'utiliser les fonctions asynchrones sans y être obligé est se compliquer la vie...
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 66
    Par défaut
    Tout cela pour dire qu'utiliser les fonctions asynchrones sans y être obligé est se compliquer la vie...
    Tiens, on dirait tout moi là !

    Merci pour ton aide !

Discussions similaires

  1. Réponses: 8
    Dernier message: 15/05/2010, 09h41
  2. [MySQL] Erreur "supplied argument is not a valid MySQL result resource"
    Par lilemy dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 29/06/2007, 14h47
  3. [MySQL] Erreur mysql_num_rows: supplied argument is not a valid MySQL result resource
    Par dfournier dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 06/12/2006, 16h40
  4. Réponses: 10
    Dernier message: 05/05/2006, 16h35
  5. supplied argument is not a valid MySQL result resource ?!
    Par alfigor dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 19/04/2006, 14h38

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