2011-10-20 1 views
1

Je travaille sur une application utilisant CodeIgniter pour l'accès à la base de données. L'application émet des requêtes comme celles-ci: $this->db->query("SELECT fields_list FROM table_name"); Mais la table contient des centaines de milliers d'enregistrements. CodeIgniter essaie de charger l'intégralité du jeu de résultats en mémoire, entraînant l'atteinte d'une limite de mémoire pour le script.CodeIgniter Requête MySQL utilisant trop de mémoire - Comment utiliser le SSCursor de MySQL?

Le problème avec ce problème est d'utiliser le SSCursor de l'API libmysqlclient, mais je ne vois aucun exemple de CodeIgniter utilisant SSCursor. Est-il possible d'utiliser le SSCursor de MySQL dans CodeIgniter?

+0

Avez-vous envisagé d'utiliser un ORM? Peut-être que Doctrine? Il gère de telles situations un peu mieux que la classe db native de CodeIgniter. –

+0

Merci pour la suggestion - Je vais vérifier – MrD

+1

Pas de problème. Je n'installe plus CI par lui-même ... Je le préemballe presque toujours avec Doctrine. C'est peut-être exagéré sur certains projets, mais mon développement est accéléré. Codage heureux! –

Répondre

0

Effectuez une boucle for et limitez le nombre d'enregistrements récupérés dans une seule requête.

Obtenez le nombre total d'enregistrements dans le tableau. Puis faire un:

for ($i=0; $i<=COUNT_OF_RECORDS; $i+=1000) { 
    $sql = "SELECT fields_list FROM table_name LIMIT $i,1000"; 
}