2012-07-05 2 views
0

AOP semble être un peu délicat, mais j'ai une grande base de données et j'obtiens cette erreur,mémoire pour les grandes données PDO

Fatal error: Allowed memory size of 100663296 bytes exhausted (tried to allocate 256 bytes) 

Lors de l'utilisation,

fetchAll() 

Quelle est la meilleure façon de le résoudre?

+0

J'ai presque peur de demander: quelle est la taille de votre base de données? – andrewsi

+0

Si vous avez besoin de charger la totalité de votre db dans un tableau PHP, la conception de votre application est probablement erronée. Augmentez la mémoire allouée au script PHP, essayez d'utiliser 'SplFixedArray' si vous connaissez le nombre de lignes que vous obtiendrez ou simplement repensez la fonctionnalité que vous êtes en train de faire et faites-le sans charger tout en mémoire. –

+0

Minuscule alors ce n'est pas du tout grand ... combien de colonnes et de champs-types/tailles? et si c'est à ça, alors vous avez besoin d'être normalisé! – Brian

Répondre

2

Vous pouvez temporairement allouer de la mémoire en utilisant:

ini_set('memory_limit', '750M'); 

Le problème réel est PHP lui-même pas PDO par-soi ... Array PHP, il est la création est trop grand ... essayer au-dessus ... évidemment 750M c'est beaucoup mais tu as l'idée!

Vous allez probablement bien dans php.ini memory_limit est 128M par défaut ... entraînant l'erreur que vous obtenez lorsque l'exécution du script dépasse tout cela.

ALTERNATIVE:

(selon mes commentaires) - extraient que ce que vous pouvez afficher pour l'utilisateur, à savoir mettre en œuvre une certaine forme de radiomessagerie.

Une excellente combinaison utilise jQuery Datatables et le pipeline de données côté serveur. C'est à dire. il ira chercher à partir de DB pour chaque page comme demandé.

AUSSI:

Assurez-vous que votre schéma a été bien conçu et normalisé et non seulement obtenu 100 de colonnes!

+0

Je suis à la recherche d'une meilleure solution que @Kemil Kokot m'a dit. – itsme

+0

Et quelle est la meilleure solution? Soit, permettez plus de mémoire ou n'enregistrez pas autant de données dans le tableau de PHP, c'est aussi simple que ça. –

+2

Une meilleure solution consiste à s'assurer que vous ne récupérerez que ce que vous pouvez afficher confortablement à l'utilisateur aussi. Un utilisateur voudra-t-il faire défiler des milliers de lignes? :) ... en supposant que c'est pour l'affichage c'est. Il en résultera une requête plus rapide à exécuter aussi. – Brian

Questions connexes