Et oui, les adeptes de l'extension MySQLi de PHP le savent, il n'existe aucun moyen de récupérer tous les résultats d'une requête d'un seul coup. Certes cette opération peut être très lourde et doit être utilisée avec précaution, mais PDO propose bel et bien un "fetchAll()".
C'est une histoire de pilote en fait, depuis PHP5.3 , MySQLi peut utiliser MySQLnd, le nouveau pilote maison sous licence PHP, supprimant la dépendance envers libMySQL.
Si MySQLi est compilée avec MySQLnd, alors vous avez accès à la fonction mysqli_fetch_all() (ou son équivalent objet).
Notez que malheureusement, il n'est toujours pas possible de récupérer un tableau ou un objet depuis une requête préparée sous MySQLi (classe MySQLi_Stmt) , on ne peut que lier des variables PHP ce qui est très peu pratique...
mysqli_fetch_all() est définie ici, pour les amateurs de C ;-)