Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]problem z Out of memory przy imporcie danych z CSV do MySQL
Forum PHP.pl > Forum > Przedszkole
northwest
Witam serdecznie,
Mam problem z zaimportowaniem 70MB pliku CSV do MySQL.
Mam następujący skrypt:
  1. $filename = "baza_ksiazek.csv";
  2. $handle = fopen("$filename", "r");
  3. $ilosc = 0;
  4. while (($data = fgetcsv($handle, 2000, ",")) !== FALSE) {
  5. $result = mysql_query("SELECT bf_id FROM cms_produkty WHERE isbn = '" . mysql_real_escape_string($data[1]) . "' LIMIT 1;", $connection);
  6. $ilosc_wierszy = mysql_num_rows($result);
  7. if ($ilosc_wierszy == 0) {
  8. if ($data['1'] != "") {
  9. $nazwakategorii = null;
  10. $nazwapodkategorii = null;
  11. $idkategorii = null;
  12. $idpodkategorii = null;
  13. $nazwakategorii = $data['12'];
  14. $nazwapodkategorii = $data['13'];
  15.  
  16. if ($nazwakategorii != "") {
  17. $result2 = mysql_query("SELECT * FROM cms_kategorie WHERE nazwa = '$nazwakategorii';");
  18. if (mysql_num_rows($result2) == 0) {
  19. mysql_query("INSERT INTO cms_kategorie (nazwa, enable) VALUES ('$nazwakategorii', '1');");
  20. $wynik = mysql_query("SELECT bf_id FROM cms_kategorie WHERE nazwa = '$nazwakategorii' ORDER by bf_id DESC LIMIT 1;;");
  21. while ($wartt2 = mysql_fetch_assoc($wynik)) {
  22. $idkategorii = $wartt2['bf_id'];
  23. }
  24. } else {
  25. $wynik = mysql_query("SELECT bf_id FROM cms_kategorie WHERE nazwa = '$nazwakategorii' ORDER by bf_id DESC LIMIT 1;;");
  26. while ($wartt2 = mysql_fetch_assoc($wynik)) {
  27. $idkategorii = $wartt2['bf_id'];
  28. }
  29. }
  30. }
  31.  
  32. //echo $idkategorii."<br/><br/>";
  33.  
  34. if ($nazwapodkategorii != "") {
  35. $result3 = mysql_query("SELECT bf_id FROM cms_podkategorie WHERE nazwa = '$nazwapodkategorii' LIMIT 1;");
  36. if (mysql_num_rows($result3) == 0) {
  37. mysql_query("INSERT INTO cms_podkategorie (nazwa, enable, kategoria) VALUES ('$nazwapodkategorii', '1', '$idkategorii');");
  38. //echo "INSERT INTO cms_podkategorie (nazwa, enable, kategoria) VALUES ('$nazwapodkategorii', '1', '$idkategorii');";
  39. $wynik = mysql_query("SELECT bf_id FROM cms_podkategorie WHERE nazwa = '$nazwapodkategorii' ORDER by bf_id DESC LIMIT 1;;");
  40. while ($wartt2 = mysql_fetch_assoc($wynik)) {
  41. $idpodkategorii = $wartt2['bf_id'];
  42. }
  43. } else {
  44. $wynik = mysql_query("SELECT bf_id FROM cms_podkategorie WHERE nazwa = '$nazwapodkategorii' ORDER by bf_id DESC LIMIT 1;;");
  45. while ($wartt2 = mysql_fetch_assoc($wynik)) {
  46. $idpodkategorii = $wartt2['bf_id'];
  47. }
  48. }
  49. }
  50. $save = "INSERT INTO cms_produkty (nazwa, obrazek, isbn, cena, autor, wydawca, strony, opis, rok, podatek, cena2, kategoria, grupa, typrekordu, enable) VALUES ('$data[3]', '$data[15]', '$data[1]', '$data[9]', '$data[4]', '$data[5]', '$data[6]', '$data[8]', '$data[7]', '$data[10]', '$data[11]', '$idkategorii', '$idpodkategorii', '1', '1');";
  51.  
  52. $save = iconv('ISO-8859-2', 'UTF-8', $save);
  53. mysql_query("$save");
  54.  
  55. }
  56. }


Import ma sprawdzić czy dana kategoria/podkategoria/produkt istnieją w bazie - i jeśli nie - to go dodać...
Problem w tym, że skrypt zwraca błąd: Fatal error: Out of memory (allocated 43778048) (tried to allocate 42997761 bytes) in /ksiegarnia/import.php on line 55

Czy ktoś ma może pomysł jak wybrnąć z tego problemu?

Z góry dziękuję bardzo za pomoc,
Northwest
mlawnik
Ustaw pole z kategorią/podkategorią jako "UNIQUE" i zaimportuj wszystko?
Wyskoczą błędy przy już istniejących wartościach.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.