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 :

Procédure stockées et PDO


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2019
    Messages : 2
    Par défaut Procédure stockées et PDO
    Bonjour,

    Je bloque depuis quelques semaines sur une erreur liée au PDO.

    En effet j'obtiens le message d'erreur suivant :

    Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute. in C:\www\Intranet\Service_Deploiement\tickets_clm\MLMAudit.php on line 52
    J'ai bien compris que cette erreur survient quand on essaye de lancer une requête alors même que la première à encore des résultats à retourner si je ne dit pas de bêtise.

    J'ai trouvé de nombreuse piste de résolution tel que fetchAll(), utilisation du closeCursor(), $bdd->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true), ... Mais rien n'y fait.

    Voici le code qui pose problème :

    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
    try{
       $bdd = new PDO("mysql:host=".$host.";dbname=".$database.";charset=utf8", $user, $passwd);
       $bdd->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
       $bdd->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
    }
    catch(Exception $e){
       die('Erreur : '.$e->getMessage());
    }
     
    if(isset($_GET['idMsp'])){
     
       $requete = $bdd->prepare("CALL InformationsMSP(:idMsp)");
       $requete->bindParam(':idMsp', $_GET['idMsp']);
       $requete->execute();
       $msp=$requete->fetchAll();
       $requete->closeCursor();
       print_r($msp);
     
       $requete = $bdd->prepare("CALL InformationsPraticien(:idMsp)");
       $requete->bindParam(':idMsp', $_GET['idMsp']);
       $requete->execute();
       $prat=$requete->fetchAll();
       $requete->closeCursor();
       print_r($prat);
     
    }
    J'utilise des procédures stockées, le problème pourrait-il venir de là ? Avez-vous d'autre piste de résolution ?

    PS : Les deux procédures stockées sont les suivantes :
    InformationsMsp :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DELIMITER $$
     
    DROP PROCEDURE IF EXISTS `InformationsMSP` $$
    CREATE DEFINER=`root`@`localhost` PROCEDURE `InformationsMSP`(
        IN `idMSP` INT
    )
    BEGIN
        SELECT * FROM msp where ID_Msp=idMsp;  
    END $$
     
    DELIMITER ;

    InformationsPraticien :

    Code sql : 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
    DELIMITER $$
     
    DROP PROCEDURE IF EXISTS `InformationsPraticien` $$
    CREATE DEFINER=`root`@`localhost` PROCEDURE `InformationsPraticien`(
        IN `idMSP` INT
    )
    BEGIN
        SELECT p.ID_Prat, p.Nom, p.Adresse, p.Telephone, p.`Type`
        FROM praticien p
        INNER JOIN contient c ON (p.ID_Prat=c.ID_Prat)
        INNER JOIN formulaire f ON (c.ID_Form=f.ID_Form)
        INNER JOIN msp m ON (f.ID_Msp=m.ID_Msp)
        WHERE m.ID_Msp=idMsp
        GROUP BY p.Nom, p.Adresse
        ORDER BY p.ID_Prat;
    END $$
     
    DELIMITER ;

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Je vais commencer par une question bête : est-ce que tout fonctionne correctement avec une seule procédure ? tu as bien les données et pas d'erreurs ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2019
    Messages : 2
    Par défaut
    Oui aucun soucis si je ne met que l'une ou l'autre.

    J'ai tester ce bout de code sur un autre environnement et aucun soucis. Par contre quand je le met sur le serveur de prod impossible de le faire fonctionner.
    Le serveur de prod est un serveur apache 2.2 avec PHP 5.2.6. Je ne peux cependant pas faire évoluer l'environnement de production car d'autre site tourne déjà dessus mais ils n'ont pas été maintenu et on se retrouve avec des fonction qui n'existe plus dans les nouvelles version de PHP.

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Hum... je ne vois pas ce qui peut clocher : tout ce que j'aurais recommandé (fetchAll et closeCursor) sont déjà dans ton script Vu que tu mentionnes des versions différentes de PHP entre les serveurs de prod et de dev, le problème est peut-être dans PHP : présent dans la version qui est en prod et corrigé dans une version plus récente.

    Question bête : vu les procédures, ne peux-tu pas faire les requêtes directement en PHP ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

Discussions similaires

  1. [SQL-Server] Procédure stockée et PDO
    Par zenoX dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 14/11/2012, 00h19
  2. [PDO] Procédures stockées et PDO
    Par Madfrix dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 24/12/2010, 11h38
  3. [PDO] [PHP 5.3][ZEND][PDO] Exécution d'une procédure stockée via PDO et Zend
    Par daav14 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 11/10/2010, 20h56
  4. [MySQL] PDO et procédure stockée mysql
    Par 0redd dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 28/09/2009, 00h11
  5. Mysql5, Procédure stockée et PDO::LastInsertId()
    Par Philsmile dans le forum SQL Procédural
    Réponses: 11
    Dernier message: 10/04/2006, 13h59

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