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 :

Appel de procédure stockée et réception du jeu de résultat [MySQL]


Sujet :

PHP & Base de données

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 80
    Points : 71
    Points
    71
    Par défaut Appel de procédure stockée et réception du jeu de résultat
    Bonjour,

    j'ai lu le chapitre proc stock du site, j'ai aussi parcouru celui sur la ref mysql, mais aucun des 2 ne peut répondre à ma question, c'est lié aussi à php :

    Est ce que je peux faire une procédure stockée qui va renvoyer comme variable (OUT) un recordset, c'est à dire le résultat d'une requête SELECT avec plusieurs lignes et plusieurs colonnes?

    En fait je voudrais adapter cet exemple de la doc http://dev.mysql.com/doc/refman/5.0/...group-row.html dans une proc stock et récuperer le SELECT en php. La 2eme question est donc: coté php comment on appelle cette proc et comment on récupère la 'variable' ainsi créée?

  2. #2
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    T'as pas besoin de variable OUT, il suffit que la procédure stockée soit basée sur un select. A ce moment là quand tu l'exécute sous PHP elle retrourne le résultat de son select au programme.

    Exemple:
    Voici la procédure stockées côté mysql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Create procedure listeEleves() As Select id, nom From Eleve;
    Dans PHP on peut exploiter cette procédure par l'appel suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    //Connexion à la base de données
      mysql_connect(.....)
      mysql_select_db(.....)
     
    //Exécution de la procédure stockée
      $resultat = mysql_query("Call listeEleve()");
    //Lecture du recordset de résultat
      while ($resultat && $ligne = mysql_fetch_array($resultat)){
          echo "<p>".$ligne["id"]." - ".$ligne["nom"]."</p>";
      }
    //Ferméture
      mysql_close();
    ?>

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 80
    Points : 71
    Points
    71
    Par défaut
    merci pour ta réponse;

    ... mais j'ai pas réussi, comprend pas pourquoi:

    requête SQL:
    call ProcTest(
    )

    MySQL a réponduocumentation
    #1312 - PROCEDURE zrogana_jeu.ProcTest can't return a result set in the given context

    Pour l'instant je suis juste du coté phpMyAdmin je fais meme pas coté php (quoique j'ai testé avec la même réponse de toute façon).
    La procédure test que j'utilise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE DEFINER=`root`@`localhost` PROCEDURE `proctest`()\nselect * from forum_discu where id_forum=0 AND id_rep=0
    ça c'est le texte donné par l'instruction SHOW CREATE PROCEDURE ProcTest.

    Ici c'est juste un select simple. J'ai une 2eme question aussi pour après si j'arrive avec le select simple: que se passe-t-il si je fais d'autres instructions après le dernier select (genre drop table pour supprimer une table temporaire) par rapport au résultat retourné par la procédure? Et si je fais plusieurs sélect dans la même procédure? (avec oracle ou sql-server il existe une possibilité d'avoir plusieurs résultats)

    merci de ton aide

  4. #4
    Membre confirmé Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Points : 547
    Points
    547
    Par défaut
    Citation Envoyé par sadeq Voir le message
    T'as pas besoin de variable OUT, il suffit que la procédure stockée soit basée sur un select. A ce moment là quand tu l'exécute sous PHP elle retrourne le résultat de son select au programme.

    Exemple:
    Voici la procédure stockées côté mysql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Create procedure listeEleves() As Select id, nom From Eleve;
    Dans PHP on peut exploiter cette procédure par l'appel suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    //Connexion à la base de données
      mysql_connect(.....)
      mysql_select_db(.....)
     
    //Exécution de la procédure stockée
      $resultat = mysql_query("Call listeEleve()");
    //Lecture du recordset de résultat
      while ($resultat && $ligne = mysql_fetch_array($resultat)){
          echo "<p>".$ligne["id"]." - ".$ligne["nom"]."</p>";
      }
    //Ferméture
      mysql_close();
    ?>
    "AS" ???

    on est sur MySQL ici
    I don't know what will be used in the next world war, but the 4th will be fought with stones. - Albert Einstein
    Pour détourner un avion, il faut monter dedans - Frédéric beigbeder

  5. #5
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 039
    Points
    6 039
    Par défaut
    Je vais rajouter ma pierre dans cette demande.
    Dans la procédure stocké il est possible de retourner plusieurs recordset. Par contre, il est faut utiliser la fonction ou la methode mysqli_multi_query.

    Il est très important de comprendre le principe lors de l'utilisation d'une procédure. Si jamais il y a plusieurs appelle de procédure stocké dans une procédure stocké il faut utiliser cette fonction au risque que la procédure stocké principal ne s'exécute pas complètement et sans message d'erreur.
    C'est un peut bizarre mais c'est ainsi dans le cas précis ou chaque procédure retourne un recordSet
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 80
    Points : 71
    Points
    71
    Par défaut
    ok il fallait utiliser les instructions en mysqli au lieu de mysql* ... merci de l'astuce

    on m'a indiqué PDO aussi par ailleurs mais j'ai pas réussi, apparement d'apres mon phpinfo il n'est pas supporté sur ma config.

  7. #7
    Membre confirmé Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Points : 547
    Points
    547
    Par défaut
    tu peux toujours recompiler php en activant pdo
    I don't know what will be used in the next world war, but the 4th will be fought with stones. - Albert Einstein
    Pour détourner un avion, il faut monter dedans - Frédéric beigbeder

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

Discussions similaires

  1. [2012] Appeler une procédure stockée sur un jeu de résultats
    Par waxman2 dans le forum Développement
    Réponses: 9
    Dernier message: 22/08/2013, 19h27
  2. Réponses: 3
    Dernier message: 17/01/2006, 17h12
  3. Update appelant une procédure stockées
    Par meufeu dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 06/10/2005, 18h31
  4. [appeler une procédure stockée]
    Par viny dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 10/03/2005, 22h38
  5. Appel de Procédure stockée en ASP
    Par James85 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 14/11/2004, 17h55

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