Cela dépend de la base de données que vous utilisez et de la configuration de votre base de données.
Pour MySQL, vous devez vous assurer que vous utilisez des requêtes mises en mémoire tampon. Dans PDO, vous le définissez comme ceci :
$myPdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
Cela signifie que toutes les données seront envoyées au client (ce n'est pas la même chose que de tout récupérer en PHP).
L'autre alternative (probablement pire) consiste à ouvrir une nouvelle connexion à la base de données chaque fois que vous détectez une requête en cours d'exécution avec un ensemble de résultats toujours ouvert.
Le mysql_query()
normal
utilise une requête mise en mémoire tampon, ce qui fonctionnera avec plusieurs ensembles de résultats.