Bonjour,
Avant toute chose, je dois vous avertir que le projet sur lequel je travaille concerne des informations commercialement sensibles pour la société chez laquelle je réalise mon stage, raison pour laquelle certaines parties de mon code seront passées sous silence. Je vais cependant essayer d'être suffisamment clair pour que vous puissiez m'aider à résoudre mon problème.
En gros, on m'a demandé de faire évoluer un Pokémon un petit site en PHP qui récupère des données dans une base de données Oracle afin de l'exporter dans un fichier au format CSV, selon une requête SQL de type SELECT
écrite à l'avance par les administrateurs et stockée dans une base MySQL. Précédemment, cette requête SQL était écrite "en dur" dans le code du site.
Mon problème, c'est qu'une requête, bien qu'elle n'ait pas changée entre la version précédente et celle que je développe, ne fonctionne plus correctement : désormais, PHP me lâche l'erreur suivante :
Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 83 bytes) in /chemin/vers/le/modele.php on line 199
La requête en question retourne en général entre 2000 et 3000 lignes.
EDIT : petite chose cocasse, une autre requête utilisant cette même fonction ne pose strictement aucun problème alors qu'elle retourne quasiment 6000 lignes…
Voici la fonction que j'appelle lorsque j'exécute ma requête :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php public function exec_requete_oracle($query) { $result = array(); $data = $this->db_ora->query($query); $data = $data->fetchAll(PDO::FETCH_ASSOC); // On ajoute au début du tableau les noms des champs sélectionnés, // afin qu'ils apparaissent dans le CSV $columns_name = array_keys($data[0]); array_unshift($data, $columns_name); return $data; } |
Notons que je suis certain de mon paramètre $query
, ayant effectué plusieurs fois des vérifications, notamment des recherches de différences entre la requête précédant mon évolution (qui fonctionnait, je le répète), sans succès…
L'erreur se déclenche sur le fetchAll()
… Sachant que je dois obligatoirement obtenir un tableau contenant l'intégralité des données, celles-ci étant ensuite envoyées à une fonction créant le CSV, comment puis-je résoudre ce problème ? :-/
Merci d'avance