J'ai un grand CSV que je veux analyser et insérer dans ma base de données. J'ai cette PHP:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 35 bytes)
4 Réponses :
Je pense que cette partie est fausse: un appel à fgecsv code> lit une ligne de
$ gérer code>. Vous devez mettre
fgecsv code> dans la condition de boucle: p>
OK, cela a arrêté l'erreur fatale. La chose est maintenant que cela écho à cette longue liste de "tableau" au lieu des valeurs réelles.
$ Data CODE> est une matrice de champs d'une ligne, que vous pouvez vérifier avec
print_r ($ données) code> ou
var_dump ($ données) code>.
Ensuite, comment avez-vous des lignes $ pour que vous obteniez chaque valeur pour que vous puissiez l'insérer dans la base de données?
J'ai mis à jour ma réponse, comme Xdazz a dit que vous n'avez pas besoin de lire le fichier entier dans un autre tableau, seulement pour la boucle à nouveau.
Cela donne toujours à l'erreur fatale de dépasser la taille de la mémoire autorisée.
Vous n'avez pas besoin de lire toutes les données CSV du fichier en mémoire avant le traitement.
Au lieu de cela, créez une boucle tandis que lit de votre fichier une ligne à la fois. Chaque fois que vous lisez à partir du fichier, vous devez insérer une ligne dans votre base de données. P>
ou lire plusieurs lignes et insérer plusieurs lignes à la fois. P>
Exemple: forte> p>
Ok, alors comment suggéreriez-vous que je boucle à travers des lignes pour les insérer dans la DB? Je veux que chaque rang soit une rangée dans la DB. J'ai essayé ceci à la boucle à travers: foreach ($ lignes en tant que $ clé de clé => $ valeur) {echo $ valeur. '';} code>, mais est sorti avec une liste de "tableau ".
@chromedede Vous êtes echo code> ing
$ valeur code> qui n'est rien en relation avec enregistrer les données à dB, il suffit de trouver un didacticiel qui vous montre comment mettre les données dans la DB.
Si vous suivez cette approche, n'oubliez pas de faire une autre appel insertion_to_db ($ lignes) après la boucle pour insérer le reste.
Pendant que vous pouvez certainement analyser et construire des requêtes avec PHP, vous obtiendrez une meilleure performance en laissant la manipuler directement MySQL. Votre base de données vous remerciera. P> sources: p>
Utiliser standard mysql Charger les données infilières Écéder à la lecture / analyse / insertion de données via PHP: Dans ce cas, vous n'avez pas besoin d'ouvrir / lire le fichier CSV dans PHP, MySQL gérera l'importation de données en soi. P> p>