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

SQL Procédural MySQL Discussion :

pdo_mysql et requêtes se chevauchant


Sujet :

SQL Procédural MySQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2005
    Messages : 147
    Points : 165
    Points
    165
    Par défaut pdo_mysql et requêtes se chevauchant
    salut,

    je trouve pas la manière "d'imbriquer" les requêtes avec le driver pdo_mysql (marche avec pg et sqlite).

    ce code plante :
    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
     
    $db=new PDO('mysql:host=localhost;dbname=toto','toto','toto');
     
    $sql="select * from table_un";
    $sql2="select * from table_deux";*/
     
    $req=$db->prepare($sql);
    $req->execute();
     
    //ça plante ici, pdo ne supporte pas d'ouvrir une requête tant que la précédente n'a pas été "parsée" en totalité
    $req2=$db->prepare($sql2); 
    $req2->execute();
     
    while ($row=$req->fetch()) {
        echo $row[0].':'.$row[1].'<br>';
        while ($row2=$req2->fetch()) {
        echo '2->'.$row2[0].':'.$row2[1].'<br>';  
        } 
    }
    j'ai pas envie d'utiliser les méthodes fetchAll() ou closeCursor().
    en revanche s'il y a une config à préciser ou autre chose ça m'intéresse.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    salut

    le fonctionnement du driver pour mysql me parait normale, tu est obliger de liberer

    Cette méthode est utile pour les drivers de base de données qui ne supportent pas l'exécution d'objet PDOStatement lorsqu'un objet PDOStatement exécuté précédemment a encore des lignes non récupérées. Si votre driver de base de données souffre de cette limitation, le problème se manifestera de lui-même dans une erreur en dehors de la séquence.
    et il y aucune option pour regler ce probleme

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2005
    Messages : 147
    Points : 165
    Points
    165
    Par défaut
    >le fonctionnement du driver pour mysql me parait normale

    dans un sens c'est pas faux, d'autant que si j'ai bien compris la limitation vient de mysql.
    on retrouve d'ailleur cette attitude avec les fonctions mysqli_xxx, et pour ce qui est de pdo l'utilisation de closeCursor() ne gène pas tant que ça la compatibilité entre l'utilisation de différents drivers.

    mais...

    si l'on veut conserver le jeux de résultat et la position du curseur on sera obliger de gérer avec une mise en tableau via fetchAll().
    les fonctions de type mysql_xxx le faisaient pour nous (donc j'imagine stockage du jeux de résultat en c, ce qui est bien mieux qu'en php).

    résultat des courses, au lieu de se retrouver avec une façade pour gérer la connection on retombe dans les vieilleries avec l'utilisation d'une façade pour gérer ce type de comportement et garder une compatibilité entre les différents sgbd.

    du coup pdo ne fait plus trop son boulôt ^^

    pour l'instant j'ai testé ce comportement avec postgres et sqlite qui l'acceptent sans broncher.

    j'aimerais bien avoir le retour de ceux qui utilisent les autres drivers vis à vis de ce problème, ou tout simplement un avis sur la question.

    +

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    moi je fai systematiquement un closecursor

    dans ton cas tu construire un nouvelle objet PDO , non?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2005
    Messages : 147
    Points : 165
    Points
    165
    Par défaut
    >dans ton cas tu construire un nouvelle objet PDO , non?

    ça marche, mais je trouve ça un peu lourd d'être obligé de faire une nouvelle connexion (même si on choisi la requête en question).
    et puis ça va forcément pénaliser les autres drivers pour rien si on veut garder le même code...ça fait un peu retour à la case départ, je vois toujours pas d'unité.

    mais je ne sais pas comment pdo gère cette situation...

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/12/2013, 09h30
  2. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  3. Requete requête sous sybase
    Par eddie dans le forum Sybase
    Réponses: 3
    Dernier message: 02/04/2003, 14h51
  4. Requête imbriquée et indexes INTERBASE
    Par vadim dans le forum InterBase
    Réponses: 2
    Dernier message: 06/09/2002, 16h15
  5. [BDD] Enregistrer le résultat d'une requête
    Par Mowgly dans le forum C++Builder
    Réponses: 5
    Dernier message: 19/06/2002, 15h26

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