Depende de qual banco de dados você está usando e da configuração do banco de dados.
Para MySQL, você precisa ter certeza de usar consultas em buffer. No PDO você configura assim:
$myPdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
Isso significa que todos os dados serão enviados para o cliente (não é o mesmo que buscar tudo em PHP).
A outra alternativa (provavelmente pior) é abrir uma nova conexão de banco de dados sempre que você detectar uma consulta sendo executada com um conjunto de resultados ainda aberto.
O normal
mysql_query()
usa uma consulta em buffer, para que funcione com vários conjuntos de resultados.