2009-08-28 13 views
1

Disons que j'ai quelque chose comme ceci:AOP et imbriqué aller chercher

$db=new PDO($dsn); 

$statement=$db->query('Select * from foo'); 

while ($result=$statement->fetch()) 
{ 
    //do something with $result 
} 

Comment puis-je mettre une autre requête à l'intérieur de cette boucle while? Même si je crée un nouvel objet PDOStatement, il semble que cela écrase le curseur pour l'instruction PDO la plus haute. La seule autre solution que je vois est soit a) aller chercher la boucle externe entière en une fois ou b) ouvrir 2 connexions différentes à la base de données. Aucun d'entre eux ne semble être une bonne idée, existe-t-il d'autres solutions?

Répondre

2

Vous devriez être en mesure de faire toute autre requête que vous voulez dans votre boucle while, je dirais; quelque chose comme ceci:

$db=new PDO($dsn); 

$statement=$db->query('Select * from foo'); 

while ($result=$statement->fetch()) 
{ 
    $statement2 = $db->query('Select * from bar'); 
    while ($result2=$statement2->fetch()) { 
     // use result2 
    } 
} 

Avez-vous essayé? Il devrait fonctionner ...

encore


, si vous le pouvez (si elle est OK avec vos données, je veux dire), en utilisant un JOIN pour faire une seule requête pourrait être mieux pour les performances: 1 requête au lieu de plusieurs est généralement plus rapide.

+2

Je suis stupide. J'écrivais $ déclaration dans ma boucle intérieure. – ryeguy

+2

Cela explique que ^^ Merci d'avoir dit quel était le problème, encore! –

0

On dirait que ce que vous essayez d'accomplir est d'obtenir des données relatives à l'enregistrement que vous regardez, pourquoi ne pas les JOINDRE à la première requête? La base de données sera mieux relier les points en interne que n'importe quelle quantité de code peut faire en externe. Mais pour répondre à votre question, je ne vois pas le mal à ouvrir une autre connexion au même DSN, la chose la plus probable est que vous obtenez une autre instance de l'objet PDO pointant vers la même connexion réelle. En outre, mais en fonction de la quantité de données que vous attendez, vous pouvez simplement aller chercher et boucler sur un tableau php.