Vai al contenuto

Importare un file CSV in un database SQL


Messaggi raccomandati

Se ho un database SQL di nome CSV_DB come faccio ad importare programmaticamente in una nuova tabella di nome TABLE_1 il file CSV posizionato all'interno di una sottocartella presente nella cartella Documenti da uno script PHP.

 

Ps Il set di caratteri è UTF-8, il delimitatore è il ; e la prima riga del file CSV deve contenere i nomi dei campi della tabella:

Schermata 2018-03-06 alle 14.55.32.png

Link al commento
Condividi su altri siti

Dallo script PHP apri il file in lettura (fopen), leggi le righe con fgetcsv.

Con la prima riga crei la tabella scorrendo l'array dei valori restituito da fgetcsv.

Con le altre righe inserisci i valori nello stesso ordine nella tabella appena creata.

 

An  a tuesday keeps the doctor away.

proud member of < noi finti professionisti > club - tessera 044

Link al commento
Condividi su altri siti

1 ora fa, pix dice:

Dallo script PHP apri il file in lettura (fopen), leggi le righe con fgetcsv.

Con la prima riga crei la tabella scorrendo l'array dei valori restituito da fgetcsv.

Con le altre righe inserisci i valori nello stesso ordine nella tabella appena creata.

 

...pensavo ci fosse una query SQL da passare al server SQL con mysqli_query();, come accade per le altre query da passare al database...

Link al commento
Condividi su altri siti

Hai scritto di volerlo fare con uno script PHP...

Se vuoi far fare il lavoro a MySQL puoi usare mysqlimport in uno script di istruzioni SQL e lanciare direttamente quello da terminale. Non serve per forza PHP.

 

Il vantaggio di usare il metodo descritto nell'altro post è che hai maggior controllo sui dati potendo ad esempio validarli e prevedere segnalazioni di errori o ignorare del tutto righe che non rispondono a dei requisiti.

Inoltre se cambi del tutto database se hai sviluppato usando PDO potrai farlo in un attimo, mentre lo script SQL potrebbe richiedere molto più lavoro.

An  a tuesday keeps the doctor away.

proud member of < noi finti professionisti > club - tessera 044

Link al commento
Condividi su altri siti

11 ore fa, pix dice:

Hai scritto di volerlo fare con uno script PHP...

Se vuoi far fare il lavoro a MySQL puoi usare mysqlimport in uno script di istruzioni SQL e lanciare direttamente quello da terminale. Non serve per forza PHP.

 

Il vantaggio di usare il metodo descritto nell'altro post è che hai maggior controllo sui dati potendo ad esempio validarli e prevedere segnalazioni di errori o ignorare del tutto righe che non rispondono a dei requisiti.

Inoltre se cambi del tutto database se hai sviluppato usando PDO potrai farlo in un attimo, mentre lo script SQL potrebbe richiedere molto più lavoro.

…e usare mysqli_import in uno script PHP?

Link al commento
Condividi su altri siti

Prova...

Ma non su tutti i server è consentito.

il controllo che hai sui dati resta comunque lo stesso di uno script SQL

An  a tuesday keeps the doctor away.

proud member of < noi finti professionisti > club - tessera 044

Link al commento
Condividi su altri siti

N.B: la funzione "mysqli_import" non credo esista. C'è la "mysqlimport" e puoi provare ad eseguire quella da PHP ma NON è una funzione di PHP bensì di MySQL, quindi in PHP devi praticamente richiamare il terminale (con exec() o simili).

An  a tuesday keeps the doctor away.

proud member of < noi finti professionisti > club - tessera 044

Link al commento
Condividi su altri siti

8 ore fa, pix dice:

N.B: la funzione "mysqli_import" non credo esista. C'è la "mysqlimport" e puoi provare ad eseguire quella da PHP ma NON è una funzione di PHP bensì di MySQL, quindi in PHP devi praticamente richiamare il terminale (con exec() o simili).

...hai regione non esiste una funzione mysqli_import in PHP, comunque pensavo che bastasse passare alla funzione mysqli_query() la stringa CREATE.png.0e571473bdf20e47bc43a0035c37f2d6.png, tanto riga di intestazione è sempre uguale: il mio problema sarebbe inserire nelle celle il loro valore perché cambia per ogni files, la parte iniziale (INSERT.png.bb1768d35ea712118f83883d1f6c345e.png) è sempre uguale quindi non sarebbe un problema ma poi dopo VALUES...

 

Comunque se l'alternativa che pensavo non è percorribile mi potresti spiegare, per favore, come utilizzare mysqlimport dopo aver richiamato il terminale?

Link al commento
Condividi su altri siti

  • 4 settimane dopo...
Il 7/3/2018 at 20:10, pix dice:

...con -ppass, --local e --ignore-lines=1 immagino che indichi rispettivamente la password, che il database è sull'host locale e che la prima riga (che solitamente è quella di intestazione) venga ignorata, che essendo sempre uguale la posso creare come detto sopra, ma con --columns=column1,column2 non riesco a capire cosa fa, soprattutto perché il tutto è concatenato al path, poi indica un file txt nel finale...puoi aiutarmi a capire, per favore?

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...