Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Uvoz podataka iz csv fajla u MySQL

[es] :: PHP :: Uvoz podataka iz csv fajla u MySQL

[ Pregleda: 2494 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Ekonomist30
Sanel Bajric
SANELDESIGN-Web developing and
programming
SANELDESIGN
Sarajevo

Član broj: 197541
Poruke: 76
92.36.176.*

Sajt: saneldesign.com


+6 Profil

icon Uvoz podataka iz csv fajla u MySQL21.06.2012. u 11:37 - pre 144 meseci
Pozdrav svima

Pitanje je sljedece - csv fajl se uploaduje u root servera.
Sada podatke iz tog csv fajla treba preko php skripte, ajde nazovimo je import.php importovati u MySQL tabelu.

Ono za sta mi treba pomoc je sljedece: Ja imam skriptu koja koristi upload formu za upload csv fajla i onda ga importuje u bazu; ali interesuje me da li se neko od vas susretao sa potrebom, odnosno kako da importujem preko PHPa u bazu csv fajl koji je VEC NA SERVERU?

Zamislio sam to ovako - uploadujem csv, cron pokrene import.php, on prepozna da li je csv datoteka na serveru i ako jeste napravi import.

Hvala vam na pomoci, svaka je dobrodosla.

Ovo je neki okvirni kod koji sam zamislio, pa bih molio da mi pomognete, jer sve sto dobijem je da mi obrise podatke iz tabele a zatim ne insertuje zapise iz csv fajla??!!!

Code:
<?php 

//Definisanje konekcije na bazu//

define('DB_SERVER', 'localhost');
define('DB_USER', 'database-username');
define('DB_PASSWORD', 'password');
define('DB_NAME', 'database-name');
 
@$conn = mysql_connect (DB_SERVER, DB_USER, DB_PASSWORD);
mysql_select_db (DB_NAME,$conn);
if(!$conn){
    die( "Ne mogu se konektovati na bazu.");
}
     
    // tabele u koje importujem podatke iz CSV fajla 
    $table = array( 
                    'tabela1', 
                    'tabela2', 
                    'tabela3', 
                    'tabela4', 
                    'tabela5', 
            ); 
             
    // ako je prva kolona u csv fajlu predstavlja nazive polja onda: 
    // $columnheadings=1 
    // a ako ne predstavlja onda: 
    // $columnheadings=0 
    $columnheadings = 0; 

    // email adresa na koju se salju rezultati 
    $emailaddress = "[email protected]"; 

    // naziv email poruke 
    $subject = "CSV Import u bazu"; 

    // email adresa za polje FROM:
    $emailfrom = "[email protected]"; 
     
    //izvodjenje operacija za sve array tebele
    foreach ($table as $tablename) { 
         
        //praznjenje tabele; po potrebi;// 
        $deleterecords = "TRUNCATE TABLE `$tablename`"; 
        mysql_query($deleterecords); 
         
        //brojaci uspjesnog i neuspjesnog importa 
        $pass = 0; 
        $fail = 0; 
         
        //csv fajl ima isti naziv kao tabela
        //delimiter je zarez, sa sitim rasporedom kao i tabela u bazi 
        //nalazi se u istom direktoriju kao i ova skripta
        $filecontents = file ("$tablename.csv"); # .csv je dodat uz naziv tabele radi provjere imena 
         
        // svaki zapis iz csv-a ce biti dodat u tabelu osim ako ne dodje do greske pri uvozu
        for($i=$columnheadings; $i<sizeof($filecontents); $i++) { 
            $insertrecord = "Insert Into `$tablename` Values ($filecontents[$i])"; 
            mysql_query($insertrecord); 
            if(mysql_error()) { 
                $fail += 1;     //povecava se ako dodje do greske pri uvozu
            } 
            else 
            { 
                $pass += 1;        //povecava se ako je uvoz uspio 
            } 
        } 
         
        // dodaje linije uz email poruku o tome kako je import izvrsen 
        // te koliko je zapisa imalo gresku 
        $message .= "Table $tablename: Success=$pass  Failure=$fail \n"; 
    } 

    //vrijeme pokretanja skripte
    $runtime = (date("d M Y H:i")); 
     
    //vrijeme cron posla 
    $message .= "\nTime of the message: $runtime (server time zone)\n\n"; 
     
    //slanje email poruke 
    mail($emailaddress, $subject, $message, "From: '$emailfrom'"); 

?>


[Ovu poruku je menjao Ekonomist30 dana 21.06.2012. u 13:13 GMT+1]

[Ovu poruku je menjao Ekonomist30 dana 21.06.2012. u 13:14 GMT+1]

[Ovu poruku je menjao Ekonomist30 dana 21.06.2012. u 13:37 GMT+1]
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
*.telecentro-reversos.com.ar.

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: Uvoz podataka iz csv fajla u MySQL21.06.2012. u 19:00 - pre 144 meseci
Komplikuješ bez potrebe. MySQL može direktno da importuje CSV.

http://dev.mysql.com/doc/refman/5.0/en/load-data.html
Tko leti vrijedi
 
Odgovor na temu

Ekonomist30
Sanel Bajric
SANELDESIGN-Web developing and
programming
SANELDESIGN
Sarajevo

Član broj: 197541
Poruke: 76
92.36.176.*

Sajt: saneldesign.com


+6 Profil

icon Re: Uvoz podataka iz csv fajla u MySQL21.06.2012. u 21:39 - pre 143 meseci
Ne komplikujem ja nista, mislim stvarno :)
Jel vidis ti kod? I onda mi dajes linkove koji vide na objasnjenje kako se importuje direktno u MySQL. Ma nemoj me zezati? Eto, hvala ti, stvarno
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
*.telecentro-reversos.com.ar.

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: Uvoz podataka iz csv fajla u MySQL21.06.2012. u 22:31 - pre 143 meseci
:) OK nisi shvatio poruku.

Code:


$filename = 'somefile.csv';
$fields = 'field1, field2, field3';
foreach($tables as $table) {
     $query = "LOAD DATA LOCAL INFILE 
                      '{$filename}' 
                      INTO TABLE {$table}
                      CHARACTER SET latin1
                      FIELDS TERMINATED BY ','
                      OPTIONALLY ENCLOSED BY '\"'
                      LINES TERMINATED BY '\n'
                      ({$fields})
                      ";
   mysql_query($query);
}



Ovaj kod radi principijelno isto sto i tvoj samo brze i uz manje koda.
Tko leti vrijedi
 
Odgovor na temu

Ekonomist30
Sanel Bajric
SANELDESIGN-Web developing and
programming
SANELDESIGN
Sarajevo

Član broj: 197541
Poruke: 76
92.36.176.*

Sajt: saneldesign.com


+6 Profil

icon Re: Uvoz podataka iz csv fajla u MySQL21.06.2012. u 22:47 - pre 143 meseci
Hvala ti u svakom slucaju, ti si se bar potrudio da budes od pomoci.
Istina je da je kod koji si naveo jednostavniji, ali ne sluzi svrsi. Ali evo zavrsio sam svoj kod koji radi, pa mozes pogledati. Hvala ti svakako.

Code:
<?php 
    # Author: Sanel
    # Email: [email protected] 
    
      
    # Skripta za import podataka u MySQL bazu iz .CSV datoteke 
    
    //Definisanje konekcije na bazu//

    define('DB_SERVER', 'host');
    define('DB_USER', 'user baze');
    define('DB_PASSWORD', 'lozinka');
    define('DB_NAME', 'ime_baze_na_koju_se_konektujemo');
 
    @$conn = mysql_connect (DB_SERVER, DB_USER, DB_PASSWORD);
    mysql_select_db (DB_NAME,$conn);
    if(!$conn){
    die( "Ne mogu se konektovati na bazu.");
}
      
    # Definisanje tabele/tabela u koje ce biti izvrsen uvoz - neogranicen broj...
    $table = array( 
                    'tabela1', 
            ); 


    # Email adresa na koju se salju rezultati importa 
    $emailaddress = "[email protected]"; 

    # Naziv email-a 
    $subject = "CSV Import"; 

    # Email adresa sa koje se salju rezultati 
    $emailfrom = "admin adresa na serveru"; 
      
# Kod ispod se ne mjenja 


    # Provjera za svaku tabelu definisanu kao array
    foreach ($table as $tablename) { 
          
        # DROP podataka iz tabele, ali ako se radi samo update, onda komentarisati ovu komandu
        $deleterecords = "TRUNCATE TABLE `$tablename`"; 
        mysql_query($deleterecords); 
          
        # Brojaci importa 
        $pass = 0; 
        $fail = 0; 
          
        # csv datoteka i fajl se trebaju isto zvati, imati isto ime, 
        # delimiter je zarez u CSV fajlu a CSV fajl ima isti rspored kao tabela, 
        # CSV fajlo/ovi i ovaj php fajl se moraju nalaziti u istom folderu
 

        $file_handle = fopen ("$tablename.csv","r");                                    
        while (($row = fgetcsv($file_handle, 1000, ",")) !== false) {                                                        
        echo "<p>tablename is $tablename"; 
         $insertrecord = "Insert Into `$tablename` Values (\"".implode('", "', $row)."\")";
        echo "<p>row is  \"".implode('", "', $row)."\"";  
            mysql_query($insertrecord); 
            if(mysql_error()) { 
                $fail += 1;     # Povecava se sa brojem gresaka pri importu
            } 
            else 
            { 
                $pass += 1;        # Povecavanje pri uspjesnom importu 
            }   
        } 
          
        
        # Dodavanje podataka o importu u email poruku
        $message .= "Import u tabelu $tablename: Uspjelo=$pass  Greska=$fail \n"; 
    } 

    # Vrijeme kad je skripta pokretana 
    $runtime = (date("d M Y H:i")); 
      
    # Vrijeme pokretanja skripte se salje u email poruci 
    $message .= "\nVrijeme poruke: $runtime (server time zone)\n\n"; 
      
    # Send the email message 
    mail($emailaddress, $subject, $message, "Od: '$emailfrom'"); 

?>

 
Odgovor na temu

ivan.a
PHP developer

Član broj: 83976
Poruke: 403
*.static.isp.telekom.rs.



+44 Profil

icon Re: Uvoz podataka iz csv fajla u MySQL22.06.2012. u 06:58 - pre 143 meseci
Možda možeš da unaprediš skriptu (mada ne vidim veliku razliku između tvog koda i onog što je kiklop74 napisao što se tiče insert-a i uvoza CSV-a u bazu).
Glavni problem kod oba koda je što se upiti izvršavaju u okviru petlje, što je generalno loša zamisao.
Bolje je spremiti query i izvršiti van petlje. Ovim se štede resursi i eliminišu greške koje se mogu javiti prilikom unosa velikog broja podataka.
I hope I didn't brain my damage - Homer
if (wife.position == kitchen) {return sandwich};
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
*.telecentro-reversos.com.ar.

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: Uvoz podataka iz csv fajla u MySQL22.06.2012. u 13:37 - pre 143 meseci
Cilj mog posta je bio da ukažem na bolji metod importovanja podataka ali ne i da rešim sve probleme :)

Što se tiče višestrukih upita u petlji nekad se to ne može izbeći a mogu se poboljšati performanse ako se koristi innodb i transakcije.
Tko leti vrijedi
 
Odgovor na temu

[es] :: PHP :: Uvoz podataka iz csv fajla u MySQL

[ Pregleda: 2494 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.