Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/08/2006, 21h56   #1
Membre actif
 
Inscription : 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 : 164
Points : 164
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 :
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.
tthierry est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2006, 22h05   #2
Membre expérimenté
 
Inscription : octobre 2004
Messages : 872
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 872
Points : 582
Points : 582
salut

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

Citation:
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
jeff_! est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2006, 12h32   #3
Membre actif
 
Inscription : 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 : 164
Points : 164
>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.

+
tthierry est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2006, 13h53   #4
Membre expérimenté
 
Inscription : octobre 2004
Messages : 872
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 872
Points : 582
Points : 582
moi je fai systematiquement un closecursor

dans ton cas tu construire un nouvelle objet PDO , non?
jeff_! est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2006, 14h27   #5
Membre actif
 
Inscription : 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 : 164
Points : 164
>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...
tthierry est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h57.


 
 
 
 
Partenaires

Hébergement Web