Jakub Słowiak

Jakub Słowiak Kierownik produkcji,
Fideltronik

Temat: Wpis do bazy danych z pliku

Witam,

(na starcie... nie jestem zawodowcem w tych sprawach)

Mam taki problem, mam plik CSV z którego zapisuje dane do bazy. W pliku jest około 5 tyś wierszy, każda zawiera 6 kolumn. Do momentu kiedy plik był mały, w czasie testów 100-200 wierszy dane zapisywały się bez problemu, teraz przy 5 tyś wpisuje około 480 i koniec...

Nie chce mieszać i podawać cały kod ale w skrócie to wygląda tak:

1) otwarcie połączenia z bazą
2) wykasowanie zawartości tabeli
3) Otwarcie pliku + Pętla
$uchwyt = fopen ($sciezka,"r");

$data = fgetcsv($uchwyt, 1000, ";");
while (($data = fgetcsv($uchwyt, 1000, ";")) !== FALSE)
{
$i++;
$sql="INSERT INTO tab3 (idpracownik,idszkolenie,data_szk,idtrener) VALUES ('".$data['1']."','".$data['2']."','".$data['3']."','".$data['4']."');";
$tmp = mysql_query($sql);
}
4) zamknięcie połączenia z bazą

Gdzie może być problem?
Robiłem również próbę i przed linią $tmp=mysql_query($sql) wstawiłem sobie echo $i - również licznik pokazuje 480.

Temat: Wpis do bazy danych z pliku

Spróbuj wyrzucić linię z zapisem do bazy i np. wyświetlaj dane na ekran - będziesz wiedzieć, czy to problem zapisu do bazy czy może odczytu z pliku
Jakub Słowiak

Jakub Słowiak Kierownik produkcji,
Fideltronik

Temat: Wpis do bazy danych z pliku

Wyrzuciłem zapis do bazy, wstawiłem echo i wyświetliłem sobie $sql - odczyt działa poprawnie, pokazuje mi wszystkie linie.

Pozdr,
Kuba.
Jakub Słowiak

Jakub Słowiak Kierownik produkcji,
Fideltronik

Temat: Wpis do bazy danych z pliku

Załadowałem cały plik przy pomocy LOAD DATA INFILE - na tą chwilę wystarczy.
Marcin Molga

Marcin Molga Senior Solution
Architect, IBM.

Temat: Wpis do bazy danych z pliku

Jakub Słowiak:
4) zamknięcie połączenia z bazą

Gdzie może być problem?

Swego czasu miałem problem z pamięcią przy imporcie kilkunastu tysięcy rekordów do bazy z excela w pojedynczej transakcji - tyle, że ja używałem dość pamięciożernego Doctrine'a i PHPExcela. Sprawdź w logach, czy nie dostajesz błędu 'Fatal error: Allowed memory size of X bytes exhausted (tried to allocate Y bytes)': http://drupal.org/node/76156

Pozdrawiam.
Paweł Kalisz

Paweł Kalisz Web & mobile
developer

Temat: Wpis do bazy danych z pliku

Może być też tak, że sypało się jakieś zapytanie bo wartość w pliku zawierała na przykład niedozwolone znaki. A rozwiązanie z LOAD DATA INFILE jest spoko, w końcu do tego służy ;)
Wojciech K.

Wojciech K. realizator pomysłów
własnych

Temat: Wpis do bazy danych z pliku

Jakub Słowiak:

1)
wydłuż czas działania skryptu (standardowo to chyba 30s)
2)
sprawdź, czy w okolicach 480 lini nie masz jakiegoś dziwnego wpisu - np. z apostrofami w treści (widzę, że nie korzystasz tutaj z żadnego escape'owania)

konto usunięte

Temat: Wpis do bazy danych z pliku

A jak nie pomoże - rozbij plik na kawałki i wrzucaj w transzach.Peter K. edytował(a) ten post dnia 26.05.10 o godzinie 15:27

konto usunięte

Temat: Wpis do bazy danych z pliku

Przede wszystkim 2 rzeczy:

1. set_time_limit(0);
2. mysql_real_escape_string();



Wyślij zaproszenie do