Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] zamiana LOAD DATA na INSERT
Forum PHP.pl > Forum > Przedszkole
pa-jong
Witam,
Administracja mojego hostingu postanowiła utrudnić mi życie
blokując polecenie LOAD DATA LOCAL INFILE co się wiąże ze zmianą kodu..

Skrypt już w zasadzie napisałem.. jednak jest pewien problem.
Uploadowany plik CSV wyglądała tak:

Kod
2012-05-10 11:00:03

"00006574";"Tytuł 1";0;36
"00005903";"Tytuł 2";0;14
"00000160";"Tytuł 3";0;4
"00004685";"Tytuł 4";0;5


i był wczytywany właśnie za pomocą LOAD DATA LOCAL INFILE
Na czym polega problem.. otóż jak widać powyżej wartości rozdzielane są za pomocą średnika
oraz pierwsze dwie znajdują się w cudzysłowach..
chodzi o to aby do bazy leciały dane bez tych cudzysłowów ( nie wiem czy poprawnie odmieniłem oO )
w przypadku LOAD DATA sprawa prosta..

  1. $strSql .= "FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '\"' ";
  2. $strSql .= "LINES TERMINATED BY '\r\n' ";
  3. $strSql .= "IGNORE 2 LINES ";


po zamianie jednak zgłupiałem..

  1. for ($i=1; $i < count($file); $i++) {
  2. list($Symbol, $Nazwa, $Stan, $Cena) = explode(';', $file[$i]);
  3. echo $i.'. INSERT INTO `tabela` VALUES(`'.$Symbol.'`, `'.$Nazwa.'`, `'.$Stan.'`, `'.$Cena.'`)<br/>';
  4. }



hmm
no niby jest preg_replace, ale co w sytuacji kiedy zmienna powinna zawierać cudzysłów np:

w pliku CSV mam
"generał "łotr" "

i chce aby mi usunęło pierwszy i ostatni znak w zmiennej i zwróciło poprostu
generał "łotr"
nospor
Ten plik to zwykły csv. PHP ma narzędzia do odczytu csv więc się nimi poprostu zainteresuj.
pa-jong
fgetcsv() nospor jak zawsze pomocny wink.gif

no i smiga aż miło wink.gif
  1. $row = 0;
  2. if (($file = fopen ('/tmp/SKL'.$intNrSkl.'.csv','r')) !== FALSE) {
  3. while (($data = fgetcsv($file, 1000, ";")) !== FALSE) {
  4. $num = count($data);
  5. //echo "<p> $num pól w lini $row: <br /></p>\n";
  6. $row++;
  7. echo $row.'. INSERT INTO `tabela` VALUES(`'.$data[0].'`, `'.$data[1].'`, `'.$data[2].'`, `'.$data[3].'`) <br>';
  8.  
  9. }
  10. fclose ($file);
  11. }


jest jedno ale.. na początku pliku csv mam 2 linie których nie chce wczytać a bynajmniej nie teraz.

2012-05-10 11:00:03
Kod
"00006574";"Tytuł 1";0;36
"00005903";"Tytuł 2";0;14
"00000160";"Tytuł 3";0;4
"00004685";"Tytuł 4";0;5


jak pominąć te 2 pierwsze linie
przy LOAD DATA było to po prostu IGNORE 2 LINES a w tym przypadku?
nospor
Skoro w pętli while lecisz po liniach to naprawdę nie potrafisz zwiekszac zmiennej powiedzmy $i o jeden i jesli ta zmienna będzie <=2 to nie dodawać nic do bazy?

if ($i>2) {
//tu kod dodawania do bazy
}
pa-jong
widzisz.. kombinowałem w ten sposób ale $row>2 dawałem w pętli while zamiast dać nowy warunek do srodka..
dzięki wink.gif
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.