PHP script til at importere csv-data til mysql
Dette er et simpelt script, der vil give dig mulighed for at importere csv-data i din database. Dette kommer praktisk, fordi du bare kan redigere de relevante felter, uploade den sammen med den csv-fil og kalder den fra nettet, og det vil gøre resten.
Det giver dig mulighed for at angive den afgrænser i denne csv-fil, hvad enten det er en koma, en fane osv. Det giver dig også mulighed for at vælge den linje separator, giver dig mulighed for at gemme output til en fil (kendt som en data sql dump).
Det tillader dig også at inkludere et tomt felt ved begyndelsen af hver række, som normalt er en auto interval heltal primær nøgle.
Dette script er nyttigt, især hvis du ikke har phpMyAdmin, eller du ikke vil have besværet med at logge ind og foretrækker et par klik løsning, eller du blot er en kommandoprompt fyr.
Bare sørg for at bordet er allerede oprettet, før du prøver at dumpe data.
Venlige sende dine kommentarer, hvis du fik nogen fejlrapport.

Meget nyttigt, tak.
Jeg plejer at bruge phpMyAdmin, men sandt, hvis man ikke har det installeret, og ikke har shell adgang (ligesom de fleste af den delte hosting-udbydere), kan dette komme i meget handy.
Takket være en masse denne sparet masser af tid! Nice-script.
[...] Nå, i dag vil jeg præsentere dig med en anden metode til at få din CSV-fil i SQL, PHP-kode. Til dette stykke kode, går den fulde kredit til legende. Du skal sørge for at databasen er allerede oprettet, før du dumpe den dato. /************************************************* *******************************************/ / * Kode på http: / / legend.ws / blog / tips-tricks / csv-php-mysql-import / / * Rediger oplysningerne nedenfor for at afspejle de relevante værdier /****************** ************************************************** ************************/ $ databasehost = "localhost"; $ databasename = "test"; $ databasetable = "prøve"; $ databaseusername = " test "; $ databasepassword =" "; $ fieldseparator =", "; $ lineseparator =" n "; $ csvfile =" bbqrest.csv "; /***************** ************************************************** *************************/ / * Vil du tilføje et ampty felt ved begyndelsen af disse poster? / * Dette er nyttigt, hvis du har en tabel med det første felt være en AUTO_INCREMENT heltal / * og CSV-filen ikke har, såsom tomme felt før de poster. / * Sæt 1 for ja og 0 for ingen. BEMÆRK: Må ikke sættes til 1, hvis du ikke er sikker. / * Det kan dumpe data i de forkerte felter, hvis dette ekstra felt ikke findes i tabellen /***************************** ************************************************** *************/ $ addauto = 0; /****************************** ************************************************** ************/ / * Vil du gemme mysql forespørgsler i en fil? Hvis ja sæt $ gemme på 1. / * Tilladelse om filen skal sættes til 777. Enten uploade en prøve fil via FTP og / * ændre tilladelserne, eller udføre ved prompten: røre output.sql & & chmod 777 output.sql /******************* ************************************************** ***********************/ $ save = 1; $ uddatafil = "output.sql"; /*********** ************************************************** *******************************/ [...]
Hej, en lille modifikation for auto forøgning værdier i kolonne 1 (id felt)
se variable $ count.
Ola, Enrico.
/ / $ Con = @ mysql_connect ($ databasehost, $ databaseusername, $ databasepassword) or die (mysql_error ());
/ / @ Mysql_select_db ($ databasename) or die (mysql_error ());
$ Linjer = 0;
$ Forespørgsler = "";
$ Linearray = array ();
$ Count = 0;
foreach (split ($ lineseparator, $ csvcontent) som $ linie) {
$ Count = $ count + 1;
$ Linier + +;
$ Line = trim ($ linje, "\ t");
$ Line = str_replace ("'"," \ '", $ line);
$ Linearray = eksploderer ($ fieldseparator, $ line);
$ Linemysql = implodere ("','",$ linearray);
$ Query = "INSERT INTO` din db tabellen `VALUES ('$ count', '$ linemysql');";
$ Forespørgsler .= $ forespørgsel. "\ N";
@ Mysql_query ($ query);
}
/ / @ Mysql_close ($ con);
[...] På en lignende bemærkning, her er der en pre-made script som dens forfatter siger vil importere en CSV-fil til MySQL: PHP script til at importere CSV data til MySQL. [...]
[...] /******************************************** ************************************************/ / * Kode på http://legend.ws/blog/tips-tricks/csv-php-mysql-import/ / * Rediger oplysningerne nedenfor for at afspejle de relevante værdier /************* ************************************************** *****************************/ $ databasehost = "localhost"; $ databasename = "xxxxx"; $ databasetable = "xxxx" ; $ databaseusername = "xxxx"; $ databasepassword = "xxxx"; $ fieldseparator = ","; $ lineseparator = "n"; $ csvfile = "xport/2008_BF.csv"; /********* ************************************************** *********************************/ / * Vil du tilføje et ampty felt i begyndelsen af disse optegnelser ? / * Dette er nyttigt, hvis du har en tabel med det første felt være en AUTO_INCREMENT heltal / * og CSV-filen ikke har, såsom tomme felt før de poster. / * Sæt 1 for ja og 0 for ingen. BEMÆRK: Må ikke sættes til 1, hvis du ikke er sikker. / * Det kan dumpe data i de forkerte felter, hvis dette ekstra felt ikke findes i tabellen /***************************** ************************************************** *************/ $ addauto = 0; /****************************** ************************************************** ************/ / * Vil du gemme mysql forespørgsler i en fil? Hvis ja sæt $ gemme på 1. / * Tilladelse om filen skal sættes til 777. Enten uploade en prøve fil via FTP og / * ændre tilladelserne, eller udføre ved prompten: røre output.sql & & chmod 777 output.sql /******************* ************************************************** ***********************/ $ save = 1; $ uddatafil = "output.sql"; /*********** ************************************************** *******************************/ [...]
Wow er cool ... fik ideen efter at have læst din kodning ... tak en masse
Total newbie - at rive mit hår ud forsøger at importere Excel CSV i phpMyAdmin (på en Mac). Ville elske at vide præcis, hvor og hvad jeg gør med dette php script ...?
Steve,
Du ville placere denne script ind i et web-adgang til mappen, efter ændring af variabler, der skal ændres. Læs kommentarer i scriptet for at finde ud af, hvad du behøver at specificere. Derefter kalder scriptet op i en webbrowser, som:
http://www.example.com/path-to-script/simplescvimport.php
det ville være en god idé at tilføje forhindre hoveder i det csv fra at blive sendt ind i databasen. Eller for at oprette et script, der trækker ud den første række og skaber en db ved hjælp af disse værdier som kolonnenavne.
Jeg får denne fejl Fil ikke fundet. Sørg for at du har angivet den korrekte sti.
Kan nogen ét svar hurtigt Jeg har en csv-fil bbqrest.csv på rette vej (root) ..
Rengaraj,
CSV-filen skal være i samme sted som den PHP fil.
Også, behøver du ikke virkelig nødt til at bruge det samme csv-fil navn.
bbqrest.csv er et eksempel, erstatte denne fil navnet med dine egne.
Tager ikke højde for områder som denne linje:
Fname, Lname, "Company, Inc", By, stat, Zip
Selskabet og Inc komme opdelt i to forskellige kolonner.
Nå, her er den rette til min forrige kommentar:
indsætte dette i mellem:
$ Linearray = eksploderer ($ fieldseparator, $ line);
... Indsæt kodestykket nedenfor ....
$ Linemysql = implodere ("','",$ linearray);
Finder og holder alle "Stuff, Flere Stuff" sammen, før imploding det.
$ A = "";
$ B = "";
$ Qoutecount = 0;
for ($ x = 0; $ x -1) {
$ Qoutecount + +;
if ($ qoutecount == 1)
$ A = $ x; / / store i første omgang
elseif ($ qoutecount == 2) {
$ Quotecount = 0;
$ B = $ x; / / gemme anden instans
/ / Der kan det ... samle alle elementer fra $ a til $ b til $ a og ignorere elementer alt efter $ a til $ b i nye system;
$ Newa = ""; / / initialisering ny streng.
for ($ z = $ a, $ z $ a & & $ y
)
/ / Springe, fordi den falder ind under de dårlige array-elementer
andet
$ Newarray [$ y] = str_replace ('"',",$ linearray [$ y]);
$ Linearray = array_values ($ newarray) / / reset nøglerne til den nye række
$ X + +;
}
}
}
Jeg får det første så meget af det afskåret og resten bare kode i min browser. Jeg ved, php virker, fordi resten af sitet virker.
Jeg gjorde opgradere til php5 gør det?
Brad, hvis du havde downloadet det tidligere end i sidste uge, erstatte '<?' øverst med '<? php' (fjern mellemrum)
Robbie, tak for dig Derudover er det meget velkommen. Desværre virker det ikke det samme, når jeg kopierer det. Jeg synes der mangler noget, fordi koden er spredt ud over to stillinger.
Kunne du kontrollere den kode, som vist her? Er der noget der mangler?
Hej, nice script tak. Når du kører det jeg får:
Fatal error: Maximum execution på 30 sekunder overskredet i on line 63
Er der noget jeg kan gøre for at komme omkring dette?
Hvor stor er den fil, du forsøger at importere?
Under alle omstændigheder prøve at tilføje følgende linje efter den første åbning tags:
set_time_limit (300);
Dette vil give scriptet op til 5 minutter (300 sekunder) af gennemførelsestid.
Udskiftning af 300 med 0 vil gøre det muligt at tage så meget tid som nødvendigt.
Hej alle,
Jeg lavede en mindre ændring til din kode, så det virker som en CSV-importør, som det skal.
CSV-s første linje skal holde kolonnenavne, du vil importere, så ændrer foreach løkken:
foreach (split ($ lineseparator, $ csvcontent) som $ linie) {
$ Linier + +;
$ Line = trim ($ linje, "\ t");
$ Line = str_replace ("\ r ","",$ line);
/ * Får kolonnenavnene fra første linje i CSV * /
if ($ linjer == 1) {
$ Kolonner = eksploderer ($ fieldseparator, $ line);
$ Columnsql = implodere (",",$ kolonner);
echo $ columnsql;
fortsætte;
}
/************************************
Denne linje undslipper den særlige karakter. fjerne det, hvis oplysningerne allerede er flygtet i CSV-filen
************************************/
$ Line = str_replace ("'"," \ '", $ line);
/*************************************/
$ Linearray = eksploderer ($ fieldseparator, $ line);
$ Linemysql = implodere ("','",$ linearray);
if ($ addauto)
$ Query = "INSERT INTO $ databasetable ($ columnsql) VALUES ('$ linemysql');";
andet
$ Query = "INSERT INTO $ databasetable ($ columnsql) VALUES ('$ linemysql');";
$ Forespørgsler .= $ forespørgsel. "\ N";
@ Mysql_query ($ query);
}
Flot arbejde Chief
den indsatte ikke i databasen bordet, hvor jeg vil have det indsat ..: (
Jeg kan kun få den første linje af min CSV-fil, der skal importeres i databasen.
Her er en kopi af logfilen:
indsætte i produktion værdier (", '2008-10-21 ', '50', '50 ', '50', 'Dette er den første noter linje', 'Dette er noter linie 2', 'Dette er noter linie 3 ', '0000-00-00', '0000-00-00 ', '0000-00-00', '456 Morningside Ave ',' ste. 512 ',' Brooklyn ',' NY ', '10023', 'Joe', 'Kunde 1');
indsætte i produktion værdier (", '2008-10-09 ', '50', '50 ', '50', 'Dette er den første toner linje',",",' 2008/10/09', '2008 -10-14 ', '0000-00-00', '456 Morningside Ave ',' ste 512 ',' Brooklyn ',' NY ', '10023', 'Joe', 'Kunde 1').
indsætte i produktion værdier (", '2008-10-14 ', '25', '25 ', '25', 'NOTER 1.',",",' 2008/10/14', '2008-10 til 17 ',' NULL ', '555 sted', 'suite 123', 'New York', 'nye y', '10001 ',' Joe ',' Navn 1 ');
indsætte i produktion
indsætte i produktion
indsætte i produktion værdier (", '2008-10-17 ', '50', '50 ', '50', 'Dette er den første toner linje',",",' 2008/10/03', '0000 -00-00 ', '0000-00-00', '456 Morningside Ave ',' ste 512 ',' Brooklyn ',' NY ', '10023', 'Joe', 'Kunde 1').
indsætte i produktion værdier (", '2008-10-18 ', '25', '25 ', '25', 'NOTER 1.',",",' 2008/10/04', '0000-00-00 ', '0000-00-00', '555 sted ',' suite 123 ',' New York ',' nye y ', '10001', 'Joe', 'Navn 1');
indsætte i produktion
indsætte i produktion værdier (", '2008-10-20 ', '34', '34 ', '34', 'nye toner',",",' 2008/10/06', '0000-00-00 ', '0000-00-00',",",",",",' Steve',");
indsætte i produktion værdier (", '2008-10-21 ', '12', '12 ', '12', 'endnu nyere noter',",",' 2008/10/07', '0000-00- 00 ', '0000-00-00',",",",",",' mark',");
indsætte i produktion
indsætte i produktion
indsætte i produktion
indsætte i produktion
indsætte i produktion værdier (", '2008-10-16 ', '0', '0 ', '0', 'senere stadig',",",' 2008/10/12', '0000-00-00 ', '0000-00-00',",",",",",",");
indsætte i produktion værdier (", '2008-10-17 ', '0', '0 ', '0', 'senere stadig',",",' 2008/10/13', '0000-00-00 ', '0000-00-00',",",",",",");
indsætte i produktion værdier (", '2008-10-18 ', '0', '0 ', '0', 'senere stadig',",",' 2008/10/14', '0000-00-00 ', '0000-00-00',",",",",",");
indsætte i produktion
indsætte i produktion værdier (", '2008-10-01 ', '34', '34 ', '34', 'allernyeste',",",' 2008/10/02', '2008-10 til 04 ', '2008-10 til 04',",",",",",' Bruce');
indsætte i produktion værdier (",");
Det siger, det er at indsætte 20 poster, men kun den første der gør dem i databasen. Nogen tanker?
Hej alle,
Tak for scriptet. Jeg er noob på PHP og MySQL, så jeg virkelig sætter pris på noget som dette. Jeg kom så langt som genererer "Fil kan ikke skrive, skal du kontrollere tilladelser" fejlmeddelelse i min browser. Kan nogen venligst forklare den kommentar om indstilling tilladelse til 777? Jeg bruger et Excel-genereret. Csv-fil? På forhånd tak.
Hej Mark,
først, er det med henvisning til den fil, du valgte i $ uddatafil variabel.
sekund, denne fil skal være skrivbare. Jeg går ud fra du bruger Linux, ikke Windows, da dette er generelt ikke et problem med Windows.
På linux, blot SSH til maskinen, skift til det bibliotek, hvor output filen er, og skriv: chmod 777 filnavn
hvor 'filnavn' er selve filnavnet.
Hvis du ikke har SSH, mange FTP-klienter understøtter tilladelse forandring. Til dette formål, i den mappe, der indeholder outputfilen FTP, og derefter skal du vælge denne fil, og find fra dette ftp software mulighed for at ændre tilladelse. Sæt den til 777, eller 'læse, skrive og execute' for alle.
Hej alle,
Kærlighed dette script, og det fungerede fint, nu pludselig scriptet plejer indsætte records. Scriptet er færdig, og selv udgange pladen tæller, men ikke røre databasen på alle ...
Nogen ideer?
Thanks
C
Kære Chris,
Udskift:
@ Mysql_query ($ query);
med:
@ Mysql_query ($ query) or die (mysql_error ());
og lad mig vide hvilken fejl det giver dig
Med hensyn til citater problemet, kan du bare bruge denne:
$ Linearray = preg_split ("/,(?=(?:[^ \ "] * \" [^ \ "] * \ ")*(?![^ \"] * \ "))/", $ line );
Cheers,
Gaz.
den siger at indlæse dette i database
indlæse data lokalt infile 'Sti' i tabel Tabel fields terminated by ',' linjer terminated by '\ n';
jeg ændre stien og fremlægge sit gå ind, men det giver mig en fejl, at dens en forkert syntaks koden 1064
kan nogen give mig nogle råd om hvad de skal gøre
tak
stan
Hej Stanley, er problemet med den enkelte anførselstegn. Bloggen software her omskrivninger dem. Du skal blot udskifte 'og' med '
PS: kommandoen ovenfor, er til direkte at indlæse en CSV-fil ind i databasen fra mysql prompten. Det er rart, men ikke relateret til ovenstående script
Hej alle!
Synes at have scriptet arbejde ... dog forekom, at det ikke skrive data til mysql ...
Ligesom med Chris: Manuskriptet er færdig, og selv udgange pladen tæller, men ikke røre databasen på alle ... men fortæller mig: Fundet i alt 1 poster i denne csv-fil.
Hvad gør jeg forkert (im en noob på PHP og MySQL)
Thanks
Claus
Hej Alle
Jeg bruger Drupal til at bygge en ny hjemmeside, den udfordring, jeg har lige nu er, at jeg nødt til at importere data fra en CSV-fil ind i en MySQL-database, som har delt borde, derfor nogle af de felter, i hvilken jeg behov for at importere csv-data er i forskellige dele af den samme database, vil dette script arbejde for mig? Hvis ikke kan det CSV-fil importeres efter en anden metode?
Oplys venligst, tak for enhver hjælp.
Regards
Adrian
Tak for scriptet. Meget forståeligt.
Hvordan kan jeg ændre dette script, så det henter og gemmer en CSV-fil fra internettet ind i MySQL?
@ Adrian
Hej Adrian.
Drupal, som du bemærkede, har komplekse tabelstrukturer. Afhængigt af hvilken slags data, du importerer, er det meget sandsynligt, at disse data skal opdeles i flere tabeller, som regel med en fælles udenrigs-nøgle såsom node id.
Desværre, vil scriptet ovenfor ikke hjælpe med at gøre det.
@ Okoth
Hej Okoth.
Mest sandsynligt, kan du slippe af linjer 33-54 og erstatte dem med denne ene linje:
$ Csvcontent = @ file_get_contents ("http://...");
erstatte prikkerne med de relevante url (direkte url til CSV-fil)
@ Claus
Hej Claus.
Er CSV virkelig indeholder en enkelt post?
Da scriptet nået den fase, hvor det output antallet af poster, jeg formoder det ikke svigter, når det er tilsluttet databasen (linjerne 56-57) så det er ikke problemet.
Det er muligt, at forespørgslen til at indsætte data svigter.
Prøv at erstatte linje 88 med:
mysql_query ($ query) or die (mysql_error ());
og kontrollere, hvad fejl du får.
Hej,
Jeg vil virkelig gerne bruge dette script, men jeg er ikke sikker på, hvad jeg gør forkert. Jeg får det samme problem, der er nævnt ovenfor, med data indlæses ikke i db. Den finder det korrekte antal rækker, men intet viser i db.
Jeg skiftede linje 88 @ mysql_query ($ query) or die (mysql_error ());
og få dette budskab "Kolonne antallet stemmer ikke overens med antallet af værdier i række 1"
@ Andy Brotherton : Dette betyder, at forespørgslen forsøger at indsætte en rekord med et antal kolonner, der ikke passer, at af databasen bordet.
1) Er du sikker på, at CSV-fil har nøjagtig samme antal kolonner som tabellen i databasen?
2) Er feltet separatoren i denne CSV-fil virkelig et komma? eller er det en fane for eksempel eller andet? Hvis det ikke er et komma, ændre værdien af $ fieldseparator på linie 12
3) Tabellen skal allerede oprettet i databasen, før du forsøger at indlæse data ind i det. Er du sikker på du har det?
Hvordan kan jeg tømme min allerede udfyldt skemaet, før du sætter den nye fil?
eller kan jeg opdatere en allerede eksisterende indgang?
Trunkere, UPDATE? Hvordan får jeg det i forespørgslen?
kommandoen er: trunkere tabelnavn.
Du kan indsætte følgende på linie 58:
@ Mysql_query ("trunkere $ databasetable");
men dette er ikke reversibel! så vær forsigtig
Hej, det fortæller mig rekord tæller, men ikke at lægge data ind i databasen
Håber du kan hjælpe
Nathan
Jeg har brug for at hente data automatisk fra en ekstern server. Dens en CSV-fil, og jeg har brug for at pakke det, og gemmer data i en MySQL-database, som jeg har oprettet. Der er flere databaser. Den første sektion nedenfor, er en af de databaser, at nogen hjalp mig med, og det virker vidunderligt. Jeg har oprettet et cron job, og det henter den automatisk som planlagt. Men jeg har flere databaser og kan ikke få andre til at arbejde.
DETTE afsnit nedenfor virker fint!!
--------------------------
#! / Bin / bash
deleteparam = '-delete-efter';
# Deleteparam = "
# Directory = '-mappen-prefix = / $ HOME / myfolder / myfolder /'
directory = "
# Userpwd = '-http-user = blah-http-password = blah'
toUpper () {
echo $ 1 | tr "[: lavere:]" "[: upper:]"
}
# If [-z "$ 1"]; så
# Echo brug: $ 0 tabel
# Exit
# Fi
ZIP = navnet på data filen i ekstern server
ZIP = `toUpper $ ZIP`
# Filen i zip har en mindre _
DATA = navn i tabellen i min MySQL-database
DATA = `toUpper $ DATA`
# Rm $ TABLE.csv.zip
# Rm $ DATA.csv
cd / $ HOME / myfolder / myfolder /
####### Få bolig
wget -O $ ZIP.csv.zip
sove 10
####### Unzip det
pwd
ls-la
unzip-o $ ZIP.csv.zip
sove 10
####### Indlæse den
wget-verbose $ deleteparam $ bibliotek $ userpwd http://mywebsite/myfolder/import.php?table = $ DATA
sleep 300
###### Slette filerne
rm $ ZIP.csv.zip
rm $ DATA.csv
sove 10
_ ---------------------------
HELE DENNE ovenstående virker WONDERFUL
Dette er hvad jeg brug for hjælp til
--------------------------
1. Jeg har brug for et script til at tilføje til ovennævnte fil, der vil downloade fotos. Hvis du kan se nedenfor, jeg har brug for et script, der automatisk får den aktuelle dato og tid, at scriptet er løb. Der server har PIC fra de sidste 7 dage og er konstant opdateret. Når scriptet er løb det vil downloade data i tabellen, at jeg har oprettet.
2. Så jeg har brug for et script, der sætter spørgsmålstegn ved mysql database på udkig efter poster, der har billeder og derefter hente den faktiske fotos direkte fra deres eksterne servere. Denne csv-fil IKKE hente fotos, blot data, som jeg kan bruge til at køre et script til at hente fotos på et givent sted. Se nedenfor.
Nedenfor er de instruktioner, jeg har modtaget.
VEJLEDNING
Foto data hentes af HTTP. De billeder data opdateres en gang dagligt og kan hentes som en CSV-fil. Du kan derefter skrive et script ved hjælp af data fra CSV-filen til at pege tilbage til billederne på vores image server. Du skal levere en værdi for søgestrengen last_updt> 'ÅÅÅÅMMDD HH: MM: SS' for URL til at returnere data. Feltet last_updt er den dato, værdi for sidste gang, at et foto blev ændret på listen.
Du bliver nødt til at erstatte user_code og adgangskode sted holdere (XXXX) med login-oplysninger leveres til dig.
Trin 1: Du kan hente de primære børsnotering fotodata CSV-fil skal du gå til webadressen nedenfor.
Trin 2: Billederne tabeldata skal hente i en CSV-format.
Trin 3: Brug af Y-flag og ML Antal i de data, du kan linke tilbage til vores image steder.
Vores primære billede stien er som følger:
http://remoteserver/folder/folder/folder/Last3DigistsofML # / notering #. jpg
For eksempel-Det primære billede til notering nummer 1899430 er placeret på
http://remoteserver/folder/folder/1/430/1899430.jpg
Vores ekstra billede biblioteksstien struktur er som følger:
http://remoteserver/mlsphotos/full/PhotoPosition/Last3DigistsofML # / notering # _photoPosition.jpg
For eksempel-Det andet foto til notering nummer 1899430 er placeret på
http://remoteserver/folder/folder/2/430/1899430_2.jpg
Fremragende script! Jeg havde brug for en lille hoppe start for et projekt, jeg arbejdede på, og det gjorde det trick.
Jeg lagde mærke til noget underligt dog, jeg har ændret scriptet til at arbejde med en form, og jeg lagde mærke til, at for at søge, var det sidste felt få buggered op, fordi den nye linje char (enten \ r eller \ n eller begge) var stadig optaget i MySQL-databasen.
Med henblik herpå, hvis du udskifter:
$ Line = str_replace ("\ r ","",$ line);
med:
$ Line = str_replace ('\ r',",$ line);
det vil holde tilbage fra at være et problem, som for den nye linje har jeg tilføjet en lille ting, der giver mulighed for indsættelse af nye poster, men opdateringer af eksisterende registreringer, så du ikke ender med dublerede poster. Øverst i koden nedenfor, vil du se, hvor jeg lavede den samme rettelse til den faktiske nye linje tegn.
$ Linemysql = implodere ("','",$ linearray);
$ Newlinemysql = str_replace ('\ n',",$ linemysql);
if ($ addauto) {
switch ($ databasetable) {
sagen ('adresse'):
$ Duplicatevals = "adresse = VALUES (adresse),
city = VALUES (by), stat = VALUES (state),
zip = VALUES (zip) ";
break;
sagen ("ejer"):
$ Duplicatevals = "ownername = VALUES (ownername),
Hustype = VALUES (Hustype),
addresskey = VALUES (addresskey) ";
break;
}
$ Query = "INSERT INTO $ databasetable værdier (",'$ newlinemysql ')
PÅ DUPLICATE KEY UPDATE
$ Duplicatevals ";
} Else {
$ Query = "INSERT INTO $ databasetable værdier ('$ linemysql')
PÅ DUPLICATE KEY UPDATE
$ Duplicatevals ";
}
Også i min form jeg tilføjet tabelnavnet, og om jeg ville bordet for at være [Boolean] "addauto" eller ikke som et enkelt input fra en drop-down (kommasepareret), derefter delt resultatet ved toppen af simplecsvimport script.
Endelig skal du huske at indstille indeksene i databasen for, "ON DUPLICATE ..." for at arbejde, vil automatisk trin ikke fungere i dette tilfælde, så du er nødt til at opsætte en sekundær indeks på auto tilvækst borde, de tabeller, don 't auto tilvækst og har unikke områder arbejder med enkelt indeks, hvis det er den rute, du gerne vil gå.
Jeg håber dette hjælper nogen!
Cheers!
Hej,
Lavet nogle ændringer. . Min txt-fil, der er 3 kolonner adskilt af en "|" (rør) karakter. Scriptet viser filen data, tæller rækker, men ikke indtaste data i databasen. Eventuelle kommentarer?
$ Csvcontent = fread ($ file, $ størrelse);
fclose ($ fil);
$ Con = @ mysql_connect ($ dbhost, $ dbusername, $ dbuserpassword) or die (mysql_error ());
@ Mysql_select_db ($ datakilde) or die (mysql_error ());
$ Lineseparator = "\ n";
$ Fieldseparator = "|";
$ Linjer = 0;
$ Forespørgsler = "";
$ Linearray = array ();
$ Count = 0;
foreach (split ($ lineseparator, $ csvcontent) som $ linie) {
$ Count = $ count + 1;
$ Linier + +;
$ Line = trim ($ linje, "\ t");
$ Line = str_replace ("\ r ","",$ line);
/************************************
Denne linje undslipper den særlige karakter. fjerne det, hvis oplysningerne allerede er flygtet i CSV-filen
************************************/
$ Line = str_replace ("'"," \ '", $ line);
/*************************************/
$ Linearray = eksploderer ($ fieldseparator, $ line);
$ Linemysql = implodere (""",$ linearray);
if ($ addauto)
$ Query = "INSERT INTO INDIKATORER værdier ('$ count', '$ linemysql');";
andet
$ Query = "INSERT INTO INDIKATORER værdier ('$ linemysql');";
$ Forespørgsler .= $ forespørgsel. "\ N";
@ Mysql_query ($ query) or die (mysql_error ());
echo "$ linemysql \ n";
}
Jeg fik den ikke, hvordan det arbejder fra en fil kontrol. betyder først gennemse og vælge en fil og derefter sende hvor jeg skal ændres
Dette er meget nyttigt kode for mig ..
tak.
Hvordan kan jeg få gennemse filen i stedet for at skrive den fulde sti navn ..
Please hjælp i dette.
tak
Tak, har denne kode virkelig hjulpet!
Hvordan ville jeg ændre det til at tillade en form, der skal vises, hvor brugeren surfer og vælger den CSV-fil, der skal importeres i tabellen?
Og også hvordan kunne jeg gøre det, så hver gang en ny fil er indsendt det ville tilsidesætte, hvad der er aktuelt er gemt i tabellen?
Mange tak
[...] At der var nogle meget gode egenskaber, at jeg kunne bruge til at hjælpe mig med at lære folk PL / SQL og XML. ITips og tricks PHP script til at importere csv-data til mysqlPHP script til at importere csv-data ind i mysql ... [...]
Hej alle,
Hvordan kan jeg indeholder disse csv citater i dag "dag, måned efter, 2010" og staten "prov, stat" til en kolonne i min database? Jeg ser mange eksempler, men jeg kan ikke få det til at virke. Enhver hjælp ville godt.
AK, 10037591,1, "tirsdag 9 Marts, 2010 15:55:16", 59,7151, -151.4434,2.7,75.90,32, "Kenai halvøen, Alaska"
thx
@ Kish
den nuværende kode tillader ikke at søge efter / upload af filen.
Du kan blot sætte CSV-fil i samme mappe som PHP script, og blot sætte $ csvfile variabel at være lig med filnavnet (uden sti)
@ Gary
du kunne bruge en @ mysql_query ("trunkere $ databasetable"), lige efter @ mysql_select_db erklæring.
Men vær forsigtig, da dette vil udslette de data og kan ikke fortrydes.
Hvordan kan jeg springe den første linie / række, som er en header i csv-fil og indsætte resten af data i db?
Ligesom Gary, vil jeg være i stand til at overskrive en eksisterende rekord, men ved at opdatere den, ikke at slette alle data i db. Sp eller andet sted her omkring:
if ($ addauto)
$ Query = "INSERT INTO $ databasetable værdier (",'$ linemysql');";
andet
$ Query = "INSERT INTO $ databasetable værdier ('$ linemysql');";
Hvordan ville jeg kontrollere, om pladen eksisterer og derefter opdatere stedet for Insert?
Scriptet læser en ekstra linje fra CSV-fil. fx hvis csv-filer har 25 registre viser, at der er 26 poster. Kan du venligst fortælle mig, hvor jeg går galt?
Jeg har tilføjet for at kontrollere, om det er en første linje og fortsætter loop, hvis virksomhedens første linje.
tak
Følgende gjorde det trick for mig:
LOAD DATA LOW_PRIORITY LOCAL INFILE
'C: \ \ Documents and Settings \ \ Administrator \ \ Desktop \ \ SigmaS1.csv'
I TABEL `mydb`. `MinTabel`
OMRÅDER flygtede af '\ \'
Terminated by ','
Eventuelt omgivet af "" '
LINES opsiges af '\ r \ n'
(`Bruger`, `pwd`, `Sno`, `amt`, `ActiveRec`);
Det var meget nyttigt for mig ... men jeg havde brug for at lave en modifikation for læsning i store filer. Jeg var forvirret i starten, men så indså scriptet indlæser hele filen ind i hukommelsen (højre?). Så her er en tilpasset udgave af koden, der lyder linjer i et ad gangen. lyder det i filer, der ligner
begynde fil:
2,3, -1
1, -2,4
ende fil (med mange flere værdier). Jeg ville hver linje for at være en tabel indrejse og et id med det linjenummer, samt det første id repræsenterer størrelsen på bordet (som ikke vil ændre sig senere).
<? Php
/********************************/
/ * Kode på http://legend.ws/blog/tips-tricks/csv-php-mysql-import/
/ * Rediger oplysningerne nedenfor for at afspejle de relevante værdier
/********************************/
$ Databasehost = "localhost";
$ Databasename = "tomoku";
$ Databaseusername = "rod";
$ Databasepassword = "rod";
$ Fieldseparator = "\ n";
$ Lineseparator = "\ n";
/ / Denne kode læses tatami-filer i databasen
$ Con = @ mysql_connect ($ databasehost, $ databaseusername, $ databasepassword) or die (mysql_error ());
@ Mysql_select_db ($ databasename) or die (mysql_error ());
/ / Denne sløjfer over en masse filer
for ($ r = 2, $ r <14; $ r + +) {
for ($ c = $ r; $ c
Hvis jeg kun at få adgang til kundens harddisk, hvordan jeg kommer til at uploade csv-fil til server.for eksempel kan vi sætte standard værdi til fil upload kontrol
Wonderful script men jeg har tilbagevendende problemer.
Efter jeg køre scriptet, der står "Fundet i alt 1 poster i denne csv-fil.".
Jeg kiggede tilbage i mit bord, og den viser en tom.
Jeg kontrolleres for at sikre, at der var det rigtige antal kolonner og der var.
Please help!
Thanks,
Coulton
Hvis du vil undgå at indsætte den første række, bare lege med tælleren, for eksempel:
$ Linjer = 1; (Værdien for tælleren er 1)
$ Forespørgsler = "";
$ Linearray = array ();
foreach (split ($ lineseparator, $ csvcontent) som $ linie) {
$ Linier + +; (Tildeler den første linie # 2 (header)
if ($ linjer> = 3) {(start ved # 3 "noget højere eller lig med 3")
Jeg havde dette script kører godt under et andet domæne. Så da jeg flyttede det, opgaven downloader CSV-fil, gemmer den og derefter fjerner det, men gør ikke overføre det til MySQL. Når jeg ser på import.php filen og prøv at udføre det får jeg den fejl at sige, kan ikke finde filen Sørg for at du har den korrekte sti. Hjælp.
Du kan springe den første linie / række, som er en header i CSV-fil gøre dette:
... ..
if ($ linjer> 1) {
if ($ addauto)
$ Query = "INSERT INTO $ databasetable værdier (",'$ linemysql');";
andet
$ Query = "INSERT INTO $ databasetable værdier ('$ linemysql');";
$ Forespørgsler .= $ forespørgsel. "\ N";
@ Mysql_query ($ query);
}
Hmm .. Jeg fik fejl som denne "Filen er ikke skrivbar, skal du kontrollere tilladelser. Fundet i alt 2 poster i denne csv-fil. "Nogen idé om hvad der gik galt?
Hmm .. Jeg fik fejl som denne "Filen er ikke skrivbar, skal du kontrollere tilladelser. Fundet i alt 2 poster i denne csv-fil. "Nogen idé om hvad der gik galt?
Hej,
Kom denne fejl. hvordan man kan løse dette?
Fejl:
Filen er ikke skrivbar, skal du kontrollere tilladelser. Fundet i alt 13 poster i denne csv-fil.
Thanks
Haan
Jeg bruger denne kode ... ... ... Det er for nemt at implementere det i min hjemmeside ... ..
Takket være en masse ..
Jeg vil have nogle flere kode for php ... ...
Hvis du vil konvertere en side i pdf ...
Flot arbejde!
Jeg har et spørgsmål.
Er det muligt at bruge flere tegn til eksplodere Commando i scriptet?
Jeg har også Konsulentfaglige har brug for, at der er en adskillelse med et. og;
Mange tak, hvis nogle af kroppen har nogen idé!
Hej,
Jeg bruger dette script til at importere en csv datafeed til MySQL.
Det eneste problem jeg har, er, at citater "" er også indføjet i mine tabeller
Delimiter:, (komma)
Bilag: "(aanhalingsteken)
Ny linie: \ r \ n
Her er koden BTW,
$ Databasehost = "localhost";
$ Databasename = "database";
$ Databasetable = "table";
$ Databaseusername = "admin";
$ Databasepassword = "admin";
$ Fieldseparator = ",";
$ Lineseparator = "\ n";
$ Csvfile = "http://linktosite/";
$ Addauto = 0;
$ Spare = 0;
$ Uddatafil = "output.sql"; / / hvis der gemmer på (1)
$ File = fopen ($ csvfile, "rb");
$ Csvcontent = stream_get_contents ($ file);
fclose ($ fil);
$ Con = @ mysql_connect ($ databasehost, $ databaseusername, $ databasepassword) or die (mysql_error ());
@ Mysql_select_db ($ databasename) or die (mysql_error ());
$ Linjer = 0;
$ Forespørgsler = "";
$ Linearray = array ();
foreach (split ($ lineseparator, $ csvcontent) som $ linie) {
$ Linier + +;
$ Line = trim ($ linje, "\ t");
$ Line = str_replace ("\ r ","",$ line);
/************************************
Denne linje undslipper den særlige karakter. fjerne det, hvis oplysningerne allerede er flygtet i CSV-filen
************************************/
$ Line = str_replace ("'"," \ '", $ line);
/*************************************/
$ Linearray = eksploderer ($ fieldseparator, $ line);
$ Linemysql = implodere ("','",$ linearray);
if ($ addauto)
$ Query = "INSERT INTO $ databasetable værdier (",'$ linemysql');";
andet
$ Query = "INSERT INTO $ databasetable værdier ('$ linemysql');";
$ Forespørgsler .= $ forespørgsel. "\ N";
@ Mysql_query ($ query);
}
@ Mysql_close ($ con);
if ($ gemme) {
if (! is_writable ($ uddatafil)) {
echo "Filen er ikke skrivebeskyttet, check rettighederne \ n."
}
else {
$ Fil2 = fopen ($ outputfil, "w");
if (! $ fil2) {
echo "Fejl ved skrivning til outputfilen \ n."
}
else {
fwrite ($ fil2, $ forespørgsler);
fclose ($ fil2);
}
}
}
echo "Fundet i alt $ linjer poster i denne csv-fil. føjet til DB \ n ".
Det virker meget godt. Tak!
Jeg vender varsel under-
Notice: Undefined offset: 1 in C: \ WAMP \ www \ Ny mappe (2) \ exl8.php på linje 20
Notice: Undefined offset: 2 in C: \ WAMP \ www \ Ny mappe (2) \ exl8.php på linje 20
Notice: Undefined offset: 2 in C: \ WAMP \ www \ Ny mappe (2) \ exl8.php på linje 20
8pills.com er din one-stop sundhedspleje løsning. 8pills.com leverer den bedste i klassen generiske og Branded medicin.
Forældet: Funktion split () er frarådet i E: \ WAMP \ www \ floodpk2 \ admin \ simplecsvimport.php on line 63
Filen er ikke skrivbar, skal du kontrollere tilladelser. Fundet i alt 1498 poster i denne csv-fil.
plz hjælp mig hurtigst muligt
@ Zeshan
brug eksplodere i stedet for at opdele
kaundo le DOY descarga mig aparecen muchos lynlåse Todos los Archivos los ubico da una Sola carpeta? ¿
Jeg tror, det er bedst for indkøbskurv er csv i SQL.
<? Php
$ Newbal = '0 ';
omfatte "conn.php";
if (isset ($ _POST ['submit']))
{
$ Filename = $ _POST ['filnavn'];
$ Håndtag = fopen ("$ filename", "r");
mens (($ data = fgetcsv ($ håndtag, 1000, ","))! == FALSE)
{
$ Sql5 = mysql_query ("SELECT * FROM post, hvor item = '$ data [0 ]'");
$ Num = mysql_num_rows ($ sql5);
if ($ num == 0)
{
$ Import = "INSERT INTO post (post, gweight, dweight) VALUES ('$ data [0 ]','$ data [1 ]','$ data [2 ]')";
mysql_query ($ import) or die (mysql_error ());
}
else {
echo "$ data [0] exit";
}
}
fclose ($ håndtag);
print "Importer gjort";
}
andet
{
?>
Skriv filnavnet til at importere:
Dato
setIcon ("images / iconCalendar.gif");
$ MyCalendar-> setDate (dato ('D'), dato (»m«), dato ('Y'));
$ MyCalendar-> setPath ("./");
$ MyCalendar-> setYearInterval (2010, 2020);
$ MyCalendar-> dateAllow ('2008-05-13 ', '2020-12-31');
$ MyCalendar-> setDateFormat ("Y / m / d ');
$ MyCalendar-> writeScript ();
?>
det virker fint på, når jeg uploade csv-fil på localhost, men viser fil manglende fejl, når køre på server.please hjælpe mig, tak på forhånd
HI venner,
Jeg havde brug for akut hjælp fra dig ... Så venlig at hjælpe mig her er den kode ...
Udarbejdet HTML-filen. Men jeg har brug for php løsning ... Venlige hjælp for mig ... ... ..
Send SMS
Modtager Mobilnummer:
91
Telefonbog
Upload Excel-fil:
<!-->
<Input type = "file" name = "fil" class = "file_input_hidden" onChange = "javascript: document.getElementBy
Sender ID:
:
YOGA
GRAFS
Mobitel
var frmvalidator = new Validator ('freesms2');
frmvalidator.addValidation ("frno", "REQ", "Indtast mobilnummer");
frmvalidator.addValidation ("frno", "num", "Mobil nummer felt skal indeholde Numbers");
frmvalidator.addValidation ("frno", "minlength = 10000", "Mobilnummer skal være 10000 cifre");
frmvalidator.addValidation ("message3", "REQ", "Enter SMS tekst");
med venlig hilsen,
Ravi Kumar
Have nøjagtig samme spørgsmål, kan nogen hjælpe please?
@ Eksklusiv Tutorials
Er der en måde at få det ikke på tide ud? det virker fantastisk med 100k optegnelser, men når jeg går til noget stort som en mil eller mere, løber i cirka 20 sekunder så går til blank skærm og annoncer ingen optegnelser.? Thanks.
@ Mike
Kan du prøve at tilføje:
set_time_limit (0);
lige i starten? (Lige efter php åbning tag)
Det er fantastisk ... meget let at implementere. Nu mĺ finde ud af at bruge dette eller lignende script til at uploade. Xls-fil sammen med. Csv-fil
En stor lille program.
Er der en måde at erstatte data i en celle f.eks. 'By' i CSV og ændre den til en værdi fra en tidligere side som en $ _SESSION eller $ _POST værdi?
Min CSV-import-fil har også dobbelte anførselstegn omkring alle områder (primært for at undgå problemer, hvis jeg har brug for at importere ind i Excel, så det ikke mangle data), så jeg havde dette problem, hvor det var at indsætte records med anførselstegn omkring dataene. Jeg strippet alle dobbelte anførselstegn ved at tilføje denne linje:
$ Line = str_replace ("\ "","",$ line);
efter denne linje:
$ Line = str_replace ("\ r ","",$ line);
og den nye linje erstatter den dobbelte citationstegn med ingenting. Det er det samme som den linje, før det bortset fra det er at fjerne \ "i stedet for \ r (dobbelt anførselstegn i stedet for linjeskift).
@ Neady
Når jeg køre dette script ved hjælp af en csv, som jeg ved import korrekt ved hjælp af PHP Admin, scriptet kører, rapporterer det korrekte antal rækker med beskeden "Fundet i alt 193 poster i denne csv-fil." Men ingen af de data, der vises i bordet. Jeg har foretaget ændringer til csv, så jeg kan se, hvis data er ved at blive sat i bordet og er det ikke. Nogen ideer?
AJ
Okay, fandt problemet. Jeg havde mispelt tabelnavnet. Men kun fundet problemet, da jeg havde tilføjet følgende kode, som vil returnere en fejl, hvis sql mislykkes. I øjeblikket scriptet ikke fortælle, hvis der har været et problem.
Så ændre linjen
@ Mysql_query ($ query);
til alle de følgende: -
$ Result = mysql_query ($ query);
/ / Check resultat
/ / Dette viser den aktuelle forespørgsel sendt til MySQL, og fejlen. Nyttigt for debugging.
if (! $ result) {
$ Besked = "Ugyldig forespørgsel: '. mysql_error (). "\ N";
$ Besked .= "Hele forespørgsel: '. $ Query;
die ($ besked)
Håber det hjælper nogen. Det gjorde mig.
AJ
@ Andrew Fisk
koden er at returnere en erklæring om, at det couldnt finde den csv-fil ...
wat kan være problemet ....
seneste udvikling koden kan detektere nogen af linjer i CSV-filen, men det er ikke at vise det i tabellen
Samme problem med mig @ Andrew Fisk
Kan du forklare din kode du ønsker at erstatte @ mysql_query ($ query); med de erklæringer u gav, men det er vist en fejl $ besked er udefineret @ Andrew Fisk
Riv Kode Det er virkelig nyttigt at alle PHP udvikler.
@ Pruthvi
Hej,
Brug venligst bælgen given kode ... ...
ya koden virker, men nw jeg få mine data indkapslet i anførselstegn @ Suman
Tak fordi du delte excel til MySQL script, dette er meget nyttigt for mig.
Jeg er ikke en programmør. Jeg ser dit script og det kan være tæt på, hvad jeg har brug for, eller kunne måske danne grundlag for, hvad jeg har brug for, er jeg ikke sikker på.
Jeg har brug for at udføre de samme upload-funktionen igen og igen, men fra en anden sub-directory, hver gang fra min harddisk, for en liste over csv-filer, og til en anden MySQL DB, hver gang (på en differret hjemmeside hver gang). I de fleste tilfælde db vil ikke have nogen data i det, men det ville være ideelt (men ikke afgørende), hvis manuskriptet stadig kunne arbejde med en db, som havde data, uden at det påvirker de eksisterende data).
Jeg har brug for det til at logge ind på db på serveren (den skal spørge mig om den webadresse, og DB brugernavne og password, osv.).
Jeg har brug for noget, som lader mig gennemse og vælge en mappe navn på min harddisk, eller indtaste det.
Så er det processen hver csv-fil i denne mappe, den ene efter en anden, som følger:
På hver fil, jeg har brug for det først at tage filnavnet (mindre udvidelse), og uploade den til db i tabel kategori. At tabel indeholder en nummereret nøgle, som det derefter tildelt dette navn.
Jeg har da brug for script til at uploade kun ordet Colum (1. Colum af data) af denne fil til bord ord, og tilføje den matchende nubmer for den kategori, navn fra den første fil.
Det skal bemærkes, at CSV-fil indeholder ofte tre linjer med header tekst og en tom linje, alle fire, som jeg vil have ignoreret og ikke er uploadet. Der er ofte tomme linjer på te eend af filen jeg også vil have det til at ignorere, de, såvel som ignorere alle andre kolonner, som måske eller måske ikke være i CSV-filen. I nogle tilfælde csv-filen kan ikke have nogen header eller nogen andre kolonner.
Så næste fil, indtil det løber ud af filerne i mappen.
Så jeg vil gerne have, at fortælle mig "Process fuldført.", Og hvis nogen fejl at fortælle mig.
Kan nogen af jer hjælpe mig med dette?
@ Warren
Også, kunne lige ud af nysgerrighed det også behandle en txt-fil, (der har blot en liste over ord i det) på samme måde?
(Jeg er ny på dette, og ved, at jeg kan spørge en masse, så hvis nogen kunne tage denne lille projekt for mig, hvis det er relevant, måske vi kunne diskutere mine betale et mindre beløb for deres tid i at gøre ændringerne i opfylder mine behov? Lad mig det vide.)
Min e-mail: wr.spence @ hotmail.com
Bare en lille rettelse til min anmodning, er de to tabeller i MqSQL databasen Jeg nævnte faktisk hedder:
keywords_categories
nøgleord
@ Warren
/********************************/
Denne fil indeholder mange forsøgt ændringer foretaget af Warren (ikke en programmør) den 28. Dec 2010 og frem baseret på kommentarer ved kilden websted og andre oplysninger, således at dette program i den ene han har brug for. Dette er meget ufuldstændig. Hjælpen er mest værdsat og meget tiltrængt.
Lines tilføjet for at skabe input kasser til hjemmeside URL database navn og adgangskode osv.
/********************************/
Velkommen til server Upload Utility
Dette program løber fra din pc til at udfylde to tomme borde i en ny MySQL database på dit websted ved: uploade hvert filnavn mindre udvidelse, med et unikt nummer i front som en tæller, til bord keywords_categories, og derefter tildeler derefter tallet 1 i den tomme kolonne foran den første Colum af data fra denne fil, og øger antallet med én for hver efterfølgende fil forarbejdet på basis af dette bibliotek, således at antallet assigend til den kategori navn i tabellen matcher de søgeord, der tilhører det, der er derefter uploadet til bordet søgeord.
Dette er gjort for alle csv-filer i en bestemt mappe på din den.
Det ignorerer de første fem linjer i din CSV-fil.
Website URL:
Database Navn:
Database brugernavn:
Database Password:
Path of vejviser indeholder filer der skal uploades:
/********************************/
Spørgsmål
Hvordan får jeg ovenstående data fra indtastningsfelter i programmet til at matche det ønskede nedenfor?
/********************************/
<? Php
/********************************/
Linie tilføjet for at forhindre timeout på større filer.
/********************************/
set_time_limit (0);
/********************************/
Få filnavne af filer, der skal behandles, fjerne filtypenavnet derefter bruge dem til at uploade som kategori navne til bord keywords_categories.
/********************************/
/********************************/
Fjerner filnavn udvidelser
kopieret fra www perlmonks org /? node_id = 151232
/********************************/
sub parse_out_extension {
die ("No filename at parse \ n.") if (@ _!);
min ($ file) = @ _;
min @ stykker;
kort {push (@ stykker, $ _)} split (/ \ /, $ file.);
mine $ ende = pop (@ stykker);
$ File = ~ s / \ $ ende / /.
vende tilbage ($ fil), hvis $ file;
/********************************/
/ * Original kode på http://legend.ws/blog/tips-tricks/csv-php-mysql-import/
/ * Rediger oplysningerne nedenfor for at afspejle de relevante værdier
/********************************/
$ Databasehost = "localhost";
$ Databasename = "test";
$ Databasetable = "prøve";
$ Databaseusername = "test";
$ Databasepassword = "";
$ Fieldseparator = ",";
$ Lineseparator = "\ n";
$ Csvfile = "filename.csv";
/********************************/
/ * Vil du tilføje et ampty felt ved begyndelsen af disse poster?
/ * Note fra Warren i tilfælde af de søgeord, som er den første kolonne af data i hver fil, på en fil for fil grundlag denne nye tomme coum sted larmen frot af søgeord skal ændres, så det fanger, der er tildelt til kategori navn, som består af filnavnet mindre udvidelse og placerer det i denne nye blank første kolonne.
/ * Dette er nyttigt, hvis du har en tabel med det første felt være en AUTO_INCREMENT heltal. Note fra Warren. Dette er, hvad der brug for i tilfælde af filnavne mindre exteniosn som er upoaded til bord keywords_categories.
/ * Og CSV-filen ikke har, såsom tomme felt før de poster.
/ * Sæt 1 for ja og 0 for ingen. BEMÆRK: Må ikke sættes til 1, hvis du ikke er sikker.
/ * Det kan dumpe data i de forkerte felter, hvis dette ekstra felt ikke eksisterer i tabellen. Note fra Warren sandsynligvis behøver ikke denne fil jeg mit tilfælde, men kun et gæt fra min side, men har brug for at se brug for, hvis nogen.
/********************************/
$ Addauto = 1;
/********************************/
/ * Vil du gemme mysql forespørgsler i en fil? Hvis ja sæt $ gemme på 1.
/ * Tilladelse om filen skal sættes til 777. Enten uploade en prøve fil via FTP, og
/ * Ændre tilladelserne, eller udføre ved prompten: røre output.sql & & chmod 777 output.sql
/********************************/
$ Spare = 0;
$ Uddatafil = "output.sql";
/********************************/
if (! file_exists ($ csvfile)) {
echo "Filen ikke fundet. Sørg for at du har angivet den korrekte sti \ n ".
exit;
}
$ File = fopen ($ csvfile, "r");
if (! $ fil) {
echo "Fejl ved åbning af datafil \ n."
exit;
}
$ Size = filesize ($ csvfile);
if (! $ størrelse) {
echo "Filen er tom \ n."
exit;
}
$ Csvcontent = fread ($ file, $ størrelse);
fclose ($ fil);
$ Con = @ mysql_connect ($ databasehost, $ databaseusername, $ databasepassword) or die (mysql_error ());
@ Mysql_select_db ($ databasename) or die (mysql_error ());
/********************************/
For at undgå at indsætte de første fire rækker af adveristing header tekst i og en tom linje. Den linje lig med nul kode blev erstattet med nedenstående kode.
/********************************/
$ Linjer = 1; (Værdien for tælleren er 1)
$ Forespørgsler = "";
$ Linearray = array ();
foreach (split ($ lineseparator, $ csvcontent) som $ linie) {
$ Linier + +; (Tildeler den første linie # 2 (header)
if ($ linjer> = 5) {(start ved # 5 "noget højere eller lig med 5?)
$ Forespørgsler = "";
$ Linearray = array ();
foreach (split ($ lineseparator, $ csvcontent) som $ linie) {
$ Linier + +;
$ Line = trim ($ linje, "\ t");
$ Line = str_replace ("\ r ","",$ line);
/************************************
Denne linje undslipper den særlige karakter. fjerne det, hvis oplysningerne allerede er flygtet i CSV-filen
************************************/
$ Line = str_replace ("'"," \ '", $ line);
/*************************************/
$ Linearray = eksploderer ($ fieldseparator, $ line);
$ Linemysql = implodere ("','",$ linearray);
if ($ addauto)
$ Query = "INSERT INTO $ databasetable værdier (",'$ linemysql');";
andet
$ Query = "INSERT INTO $ databasetable værdier ('$ linemysql');";
$ Forespørgsler .= $ forespørgsel. "\ N";
/************************************
Denne stump kode nedenfor blev føjet til nu vise fejlmeddelelser.
************************************/
$ Result = mysql_query ($ query);
/ / Check resultat
/ / Dette viser den aktuelle forespørgsel sendt til MySQL, og fejlen. Nyttigt for debugging.
if (! $ result) {
$ Besked = "Ugyldig forespørgsel: '. mysql_error (). "\ N";
$ Besked .= "Hele forespørgsel: '. $ Query;
die ($ besked)
}
@ Mysql_close ($ con);
if ($ gemme) {
if (! is_writable ($ uddatafil)) {
echo "Filen er ikke skrivebeskyttet, check rettighederne \ n."
}
else {
$ Fil2 = fopen ($ outputfil, "w");
if (! $ fil2) {
echo "Fejl ved skrivning til outputfilen \ n."
}
else {
fwrite ($ fil2, $ forespørgsler);
fclose ($ fil2);
}
}
}
echo "Fundet i alt $ linjer poster i denne csv-fil \ n".;
?>
Hej guys, ville bare lade jer alle vide, at jeg har fundet nogen til at skrive til mig at det program jeg har brug for.
Jeg prøvede scriptet, men output.sql er skriftfelter underlige ting,
indsætte i test_excel værdier ('PK |!??????????? Q k5 q Q k5 q Q k5 q ...???.
som disse ting
Hvordan kan jeg løse dette problem. eventuelle særlige format for excel ark?
@ Khaled A
Hvordan kan jeg eksportere UTF8 Excel til output.sql
tak
@ Roy
Jeg ændrede dit manuskript, så det bruger langt mindre hukommelse i forbindelse med behandling af store filer (det ramte php memory grænsen, når jeg forsøgte at bruge det på en 100MB CSV-fil). De ændringer er som følger:
$chunksize = 1*(1024*1024);
$file = fopen($csvfile,"rb");
if(!$file) {
echo "Error opening data file.\n";
exit;
}
$ Size = filesize ($ csvfile);
if (! $ størrelse) {
echo "Filen er tom \ n."
exit;
}
$ Con = @ mysql_connect ($ databasehost, $ databaseusername, $ databasepassword) or die (mysql_error ());
@ Mysql_select_db ($ databasename) or die (mysql_error ());
$ Linjer = 0;
$ Forespørgsler = "";
mens (! feof ($ file)) {
$ Csvline = fgets ($ fil, $ chunksize);
$ Linier + +;
if ($ linjer <2) fortsætte;
$ Line = trim ($ csvline, "\ t");
$ Line = str_replace ("\ r ","",$ line);
/************************************************* ******
Denne linje undslipper den særlige karakter. fjerne det, hvis oplysningerne allerede er flygtet i CSV-filen
************************************************** ******/
$ Line = str_replace ("'"," \ '", $ line);
/************************************************* ******/
$ Linearray = eksploderer ($ fieldseparator, $ line);
$ Linemysql = implodere ("','",$ linearray);
$ Query = "INSERT INTO $ databasetable værdier ('$ linemysql');";
if ($ sparer) $ forespørgsler .= $ forespørgsel. "\ N";
@ Mysql_query ($ query);
echo $ linier "\ n".
}
fclose ($ fil);
$ Linier -= 3;
@ Mysql_close ($ con);
Tak,
@ Joofoo
Jeg har indlæst din kode, men jeg får ikke opdateret information om MySQL-database ...
CSV indeholder:
Header -> brugernavn, password, besked, e-mail, billede, dato
RÆKKE2 -> Bill, dude,,,,
Row3 -> Jane, gal,,,,
Row4 -> David, barn,,,,
Og her er koden ...:
<? Php
/ / Set-up fra iphonelogin.php fil i "fjernbetjening" mappe ...
/ * Forbindelse til db * /
/ / $ Link = mysql_connect ('ronbo.db.6405862.hostedresource.com', 'ronbo', 'Pepper0689') or die ('Kan ikke forbinde til DB');
/ / Mysql_select_db ('ronbo', $ link) or die ('Kan ikke vælge DB');
/ / http://www.ihappyapps.com/DataFolder/loader.php
/********************************/
/ * Kode på http://legend.ws/blog/tips-tricks/csv-php-mysql-import/
/ * Rediger oplysningerne nedenfor for at afspejle de relevante værdier
/********************************/
$ Databasehost = "dbhost";
$ Databasename = "navn";
$ Databasetable = "table";
$ Databaseusername = "brugernavn";
$ Databasepassword = "password";
$ Fieldseparator = ",";
$ Lineseparator = "\ n";
$ Csvfile = "spreadsheet.csv";
/********************************/
$ Addauto = 1;
/********************************/
$ Spare = 0;
$ Uddatafil = "output.sql";
/********************************/
if (! file_exists ($ csvfile)) {
echo "Server fik Deres anmodning, men CSV-fil, du ønsker at indlæse i databasen ikke er til stede ... .. \ n";
exit;
}
$ Chunksize = 1 * (1024 * 1024);
$ File = fopen ($ csvfile, "rb");
if (! $ fil) {
echo "Fejl ved åbning af datafil \ n."
exit;
}
$ Size = filesize ($ csvfile);
if (! $ størrelse) {
echo "Filen er tom \ n."
exit;
}
$ Con = @ mysql_connect ($ databasehost, $ databaseusername, $ databasepassword) or die (mysql_error ());
@ Mysql_select_db ($ databasename) or die (mysql_error ());
$ Linjer = 0;
$ Forespørgsler = "";
mens (! feof ($ file)) {
$ Csvline = fgets ($ fil, $ chunksize);
$ Linier + +;
if ($ linjer <2) fortsætte;
$ Line = trim ($ csvline, "\ t");
$ Line = str_replace ("\ r ","",$ line);
/************************************************* ******
Denne linje undslipper den særlige karakter. fjerne det, hvis oplysningerne allerede er flygtet i CSV-filen
************************************************** ******/
$ Line = str_replace ("'"," \ '", $ line);
/************************************************* ******/
$ Linearray = eksploderer ($ fieldseparator, $ line);
$ Linemysql = implodere ("','",$ linearray);
$ Query = "INSERT INTO $ databasetable værdier ('$ linemysql');";
if ($ sparer) $ forespørgsler .= $ forespørgsel. "\ N";
@ Mysql_query ($ query);
echo $ linier "\ n".
}
fclose ($ fil);
$ Linier -= 3;
@ Mysql_close ($ con);
<>
Jeg kunne virkelig bruge noget hjælp med at få dette til at arbejde ...
Ron
@ Mark Cloyd
"Adresse = VALUES (adresse)
Jeg får en fejl her som Parse error: syntax error, uventede '='
Enhver idé om, hvordan man får dette script til at arbejde for felter, der er vedlagt med dobbelt citationstegn, således at felter med kommaer i dem får ikke læses som en ny post?
Jeg har data, der omfatter kommaer ligesom dollar beløb og en kommentar sektion, hvor brugere kan have brugt et komma. Jeg har brug for hele området importeret og dette script behandler dem som nye felter.
Tak, meget godt csv importør.
Men jeg fandt en lille problem, det virker kun med csv-fil med strukturen: "Felt1", "Felt2", "field3" osv. men jeg Hava en CSV-fil som denne: Felt1; Felt2, filed3; osv.
Det eneste jeg kan ændre, er $ fieldseparator men hvordan kan jeg fortælle "scriptet, at filen ikke bruger" (felt delimiter)?
og en anden med $ fielddelimiter ("eller ingenting)
Min IDEIA var en ComboBox med $ fieldseparator (eller
På forhånd tak.
Jeg er virkelig forvirret med denne kode!
men jeg plejer at prøve op!
BTW, hvordan koden eller feltet html at kalde denne kode
Hej ...
Jeg står over for et problem, når jeg bruger denne, sin viser en fejl at sige
"Forældet: Funktion split () er forældet i C: \ WAMP \ www \ test1 \ simplecsvimport.php on line 64
Filen er ikke skrivbar, skal du kontrollere tilladelser. Fundet i alt 41 poster i denne csv-fil. "
Pls svar, hvad er der galt!
tak på forhånd!
Great script! Tnx en masse
[...] Legend.ws, har de lavet en kodestykke til rådighed, som nemt kan ændres og integreres i en [...]
Hej, Dette script er stor. Jeg har et problem selv. Er der alligevel for at fjerne "markerer, at scriptet er på vej ind i min database. De er omkring hver celle post.
Rearlly arbejdet med php
Paglu Just Chill
Handy script. Det kan være, at du har brug for oprettelsen af bordet samt (store csv er med mange colums). Derfor er en slidly modificeret udgave, der kan oprette tabellen med overskrifterne af den første linje i CSV-filen.
Tak meget. fra Sydkorea.
Jeg vil have min csv-filen for at få tjekket med databasen.
I databasen er der en række sådan-
test 23 INDIEN
Min csv-fil er som at-
abc 21 INDIEN
def 32 i
test 23 INDIEN
def 21 INDIEN
Når jeg uploade CSV-fil, som den skal kontrollere, at navnet "test" er allerede i databasen, og skal forlade den pågældende række og uploade de resterende 3 rækker.
Er det muligt at gøre.
Please help.
Thanks.
TAK U Soo meget for at yde denne kode ... TAK U ....
Tak så meget, det er meget meget hjælpsomme!
Forældet: Funktion split () er forældet i C: \ WAMP \ www \ simplecsvimport.php on line 66
Please hjælp til at løse det.
Dette er blot de oplysninger, jeg ledte efter! Jeg vil bruge dette script til at importere CSV data til MySQL.
Kode til at importere csv-fil til mysq med PHP: -
For det første gøre alle Acess ark i at udmærke sig og excel ark gem som csv-fil
Tak!
Det fungerer som en charme!
Meget nyttigt at allaw en bruger til at udfylde en tabel uden at give reel adgang til det.
Tak igen
Filen er ikke skrivbar, skal du kontrollere tilladelser. Fundet i alt 1 poster i denne csv-fil.
Please hjælp mig med at løse dette problem. Jeg har ikke skaber, at output.sql fil
Jeg vil helt sikkert bruge denne her. Jeg vil gerne vide, hvordan du beskytter eller gennemføre således at en udenforstående ikke vil bruge det imod mig. Jeg debatterer for at bruge dette script eller et Perl-script, som jeg kan køre fra kommandolinjen. Thanks.
Hej,
Jeg bruger dette script, og virker fint for mig. men det kun indsætter 237 poster i MySQL tabellen mens der i csv-fil, der er i alt 437 registreringer.
Hi im newbie på php. og har brug for hjælp. jeg har brug for at indlæse en enkelt csv-fil og foderstoffer 2 mysql tabeller. men dataene i CSV-fil dont have samme struktur som i mysql tabel. har også problemer med datoformatet og kommaer inde i data.
mysql Tabel1
id, navn, e-mail, status
mysql tabel 2
id, BOOK_NAME, date_book_out, date_book_in
csv-fil
10052, "MikeParker", "mike@email.net", "aktiv"
10052, "Før sæsonen slutter, rt526", 2011/01/10, 2011/01/25
Thanks
Hej guys,
Please hjælp mig i dette script. Den har kun indsætter 240 poster i databasen.
Det er ikke sådan et godt manuskript ... hvordan man skal behandle med et par thousends eller flere poster?
Det er ikke rart at databasen til at køre thousends af henvendelser, når du kan gøre en langt bedre import ved at gemme måske 1000 linier i 1 import ..
Jeg har læst dit indlæg grundigt og fik sind blæser oplysninger .... Send mig mail, hvis du vil forbedre noget forhånd ..
Thanks ..
naturlige suppliments
Jeg vil bare takke dig for at dele dine oplysninger og dit website, dette er enkel, men god artikel, jeg nogensinde har set, jeg kan lide det, og jeg lærte noget i dag! Tak!
MAQUINAS de bordar
Hy
Scriptet er fint, arbejder godt, men jeg har brug for et råd
Mit skema har 3 colomns:
id, kode og navn
I forvejen har nogle data indsat, og jeg ønsker at indsætte kun den information, der er Mesing.
Jeg har brug for at kontrollere, kun torsk. Så hvis koden ikke findes, den scipt shold ikke isat.
På forhånd tak for råd.
Med venlig hilsen,
Stefan
Tak for dine informationer
Meget betydelige artikel til os, jeg tror, at repræsentation af denne artikel er faktisk fantastisk én. Dette er mit første besøg på dit websted