PHP-skript för att importera CSV-data till MySQL
Detta är ett enkelt skript som tillåter dig att importera CSV-data i din databas. Detta kommer praktiskt eftersom du kan enkelt redigera fälten, ladda upp den tillsammans med CSV-fil och kallar den från nätet och kommer att göra resten.
Det kan du ange avgränsare i CSV-fil, om det är en koma, en flik etc. Det kan du också välja linjen separator, kan du spara resultatet till en fil (som kallas uppgifter sql dump).
Det tillåter dig också att inkludera ett tomt fält i början av varje rad, som vanligtvis är en automatisk ökning heltal primärnyckel.
Detta skript är användbart huvudsakligen om du inte har phpMyAdmin, eller om du inte vill ha besväret med att logga in och föredrar ett par klick lösning eller om du helt enkelt en kommandotolk kille.
Se bara till att bordet redan skapats innan du försöker att dumpa data.
Vänligen skicka dina kommentarer om du fick någon felrapport.

Mycket användbart, tack.
Jag brukar använda phpMyAdmin, men sant, inte om man inte har det installerat, och inte har skal tillgång (som de flesta av de delade webbhotell), kan detta komma väl till pass.
Tack mycket i sparade massor av tid! Trevlig skript.
[...] Men i dag vill jag presentera dig med en annan metod för att få din CSV-fil till SQL, med PHP-kod. För denna del av koden, går hela kredit till legend. Du måste se till att databasen redan skapats innan du dumpa datumet. / ************************************************* ******************************************* / / * Kod på http: / / legend.ws / blogg / tips-tricks / csv-php-mysql-import / / * Redigera posterna nedan för att återspegla de lämpliga värden / ****************** ************************************************** ************************ / $ DatabaseHost = "localhost", $ DatabaseName = "test", $ databasetable = "prov", $ databaseusername = " test ", $ databasepassword =" "; $ fieldseparator =", ", $ lineseparator =" n ", $ csvfile =" bbqrest.csv "; / ***************** ************************************************** ************************* / / * Vill du lägga till en ampty fältet i början av dessa poster? / * Detta är användbart om du har en tabell med det första fältet är en AUTO_INCREMENT heltal / * och CSV-filen inte har såsom tomma fältet innan poster. / * Set 1 för Ja och 0 för ingen. VARNING: inte satt till 1 om du är osäker. / * Detta kan dumpa data i fel områden om detta extra fält inte finns i tabellen / ***************************** ************************************************** ************* / $ addauto = 0; / ****************************** ************************************************** ************ / / * Vill du spara mysql frågor i en fil? Om ja in $ spara till 1. / * Tillstånd på filen ska vara inställd på 777. Antingen ladda upp en exempelfil via FTP och / * ändra behörigheter, eller exekvera vid prompten: touch output.sql && chmod 777 output.sql / ******************* ************************************************** *********************** / $ sparar = 1, $ utdatafil = "output.sql"; / *********** ************************************************** ******************************* / [...]
Hej, en liten modifiering för auto uppräkning värden i kolumn 1 (ID-fält)
se variabeln $ räknas.
ola, Enrico.
/ / $ Con = @ mysql_connect ($ DatabaseHost, $ databaseusername, $ databasepassword) or die (mysql_error ());
/ / @ Mysql_select_db ($ DatabaseName) or die (mysql_error ());
$ Lines = 0;
Kr frågor = "";
$ Linearray = array ();
$ Count = 0;
foreach (Split ($ lineseparator, $ csvcontent) som $ line) {
$ Count = $ count + 1;
$ Lines + +;
$ Linje = trim ($ line "\ t");
$ Linje = str_replace ("'", "\'", $ line);
$ Linearray = explodera ($ fieldseparator, $ line);
$ Linemysql = implodera ("','", $ linearray);
$ Query = "INSERT INTO` ditt db tabellen `VALUES ('$ count', '$ linemysql');"
Kr frågor. = $ Query. "\ N";
@ Mysql_query ($ query);
}
/ / @ Mysql_close ($ con);
[...] På ett liknande notering, här är en pre-made skript som dess författare säger att kommer att importera en CSV-fil till MySQL: PHP skript för att importera CSV-data till MySQL. [...]
[...] / ******************************************** ************************************************ / / * Kod vid http://legend.ws/blog/tips-tricks/csv-php-mysql-import/ / * Redigera posterna nedan för att återspegla de lämpliga värden / ************* ************************************************** ***************************** / $ DatabaseHost = "localhost", $ DatabaseName = "xxxxx", $ databasetable = "xxxx" , $ databaseusername = "xxxx", $ databasepassword = "xxxx", $ fieldseparator = ",", $ lineseparator = "n", $ csvfile = "xport/2008_BF.csv"; / ********* ************************************************** ********************************* / / * Vill du lägga till en ampty fältet i början av dessa handlingar ? / * Detta är användbart om du har en tabell med det första fältet är en AUTO_INCREMENT heltal / * och CSV-filen inte har såsom tomma fältet innan poster. / * Set 1 för Ja och 0 för ingen. VARNING: inte satt till 1 om du är osäker. / * Detta kan dumpa data i fel områden om detta extra fält inte finns i tabellen / ***************************** ************************************************** ************* / $ addauto = 0; / ****************************** ************************************************** ************ / / * Vill du spara mysql frågor i en fil? Om ja in $ spara till 1. / * Tillstånd på filen ska vara inställd på 777. Antingen ladda upp en exempelfil via FTP och / * ändra behörigheter, eller exekvera vid prompten: touch output.sql && chmod 777 output.sql / ******************* ************************************************** *********************** / $ sparar = 1, $ utdatafil = "output.sql"; / *********** ************************************************** ******************************* / [...]
Wow är cool ... hade idén efter läsa dina kodning ... tacka en hel del
Total nybörjare - slita mitt hår ut försöker importera Excel CSV i phpMyAdmin (på en Mac). Skulle gärna veta exakt var och vad jag gör med det här php script ...?
Steve,
Du skulle placera det här skriptet i en webb-tillgänglig mappen efter byte de variabler som måste ändras. Läs kommentarerna i skriptet att ta reda på vad du behöver ange. Sedan ringer skriptet i en webbläsare, som:
http://www.example.com/path-to-script/simplescvimport.php
det skulle vara en bra idé att lägga förhindra rubriker i csv från att lämnas in i databasen. Eller för att skapa ett skript som drar ut den första raden och skapar en db med dessa värden som kolumnnamn.
Jag får det här felet Filen kunde inte hittas. Se till att du angett rätt sökväg.
Kan någon svar fort jag har en CSV-fil bbqrest.csv på rätt väg (root) ..
Rengaraj,
CSV-filen ska vara på samma plats som PHP-filen.
Dessutom behöver du inte verkligen måste använda samma namn csv-fil.
bbqrest.csv är ett exempel, ersätta denna filnamnet med din egen.
Tar inte hänsyn till områden som den här raden:
Fname, lname, "Företag, Inc", City, State, Zip
Företag och Inc få uppdelad i två olika kolumner.
Tja, här är fix till min tidigare kommentar:
Sätt detta i mellan:
$ Linearray = explodera ($ fieldseparator, $ line);
... In kodsträng nedan ....
$ Linemysql = implodera ("','", $ linearray);
Hittar och håller alla "Stuff, Mer Stuff" tillsammans innan imploderar den.
$ A = "";
$ B = "";
$ Qoutecount = 0;
för ($ x = 0; $ x -1) {
$ Qoutecount + +;
if ($ qoutecount == 1)
$ A = $ x, / / store första hand
elseif ($ qoutecount == 2) {
$ Quotecount = 0;
$ B = $ x, / / store andra instans
/ / Som GÖR DET ... sammanställa alla element från $ a till $ b till $ ett och ignorera faktorer någonting efter $ a till $ B i ny array;
$ Newa = ""; / / initiera ny sträng.
för ($ z = $ a, $ z $ a && $ Y
)
/ / Hoppa eftersom den omfattas av de dåliga arrayelementen
annanstans
$ Newarray [$ y] = str_replace ('"',", $ linearray [$ y]);
$ Linearray = array_values ($ newarray), / / reset nycklar till den nya arrayen
$ X + +;
}
}
}
jag få den första så mycket av det avskurna och resten bara kod i min webbläsare. Jag vet att php fungerar eftersom resten av webbplatsen fungerar.
Jag ville uppgradera till php5 spelar det för roll?
Brad, om du hade hämtat den tidigare än förra veckan, ersätta "<?" överst med "<? php" (ta bort mellanslag)
Robbie, tack för att du dessutom är välkomna riktigt. Tyvärr fungerar det inte direkt när jag kopiera den. Jag tror att något saknas eftersom koden sprids ut över två tjänster.
Kan du kontrollera koden som visas här? Saknas något?
Hej, fina script tack. När du kör det jag får:
Fatal error: maximitid för genomförandet av 30 sekunder överskrids on line 63
Finns det något jag kan göra för att komma runt detta?
Hur stor är filen du försöker importera?
I varje fall försöka lägga till följande rad efter de första inledande tags:
set_time_limit (300);
Detta kommer att ge skriptet upp till 5 minuter (300 sekunder) av verkställighetstiden.
Byta 300 med 0 gör det möjligt att ta så mycket tid som behövs.
Hej alla,
Jag gjorde en mindre ändring i din kod, så det fungerar som en CSV importör, som det ska.
CSV-s första raden ska hålla kolumnnamnen du vill importera, så ändra foreach loop:
foreach (Split ($ lineseparator, $ csvcontent) som $ line) {
$ Lines + +;
$ Linje = trim ($ line "\ t");
$ Linje = str_replace ("\ r", "", $ line);
/ * Får KOLUMN namn från första raden i CSV * /
if ($ linjer == 1) {
Kr kolonner = explodera ($ fieldseparator, $ line);
$ Columnsql = imploderar (",", $ kolonner);
echo $ columnsql;
fortsätter;
}
/ ************************************
Denna linje försvinner den speciella karaktär. bort det om poster redan flydde i CSV-filen
************************************ /
$ Linje = str_replace ("'", "\'", $ line);
/ ************************************* /
$ Linearray = explodera ($ fieldseparator, $ line);
$ Linemysql = implodera ("','", $ linearray);
if ($ addauto)
$ Query = "INSERT INTO SEK databasetable ($ columnsql) värden (" $ linemysql '); "
annanstans
$ Query = "INSERT INTO SEK databasetable ($ columnsql) värden (" $ linemysql '); "
Kr frågor. = $ Query. "\ N";
@ Mysql_query ($ query);
}
Nice work chefen
den inte sätts in i databasen tabellen där jag vill ha det läggas ..: (
Jag kan bara få den första raden av min CSV-fil som ska importeras till databasen.
Här är en kopia av loggfilen:
infoga i produktionsvärden (", '2008-10-21 ', '50', '50 ', '50', 'Detta är den första Notes raden", "det här är noter linje 2", "det här är anteckningar linje 3 "0000-00-00 ', '0000-00-00', '0000-00-00 ', '456 Morningside Ave", "Ste. 512", "Brooklyn", "NY", '10023', "Joe", "Kund 1 ');
infoga i produktionsvärden (", '2008-10-09 ', '50', '50 ', '50', 'Detta är den första Notes linjen", "," '2008-10-09', '2008 -10-14 ", 0000-00-00 ', '456 Morningside Ave", "ste 512", "Brooklyn", "NY", '10023', 'Joe "," Kund 1).
in in produktionsvärden ("'2008-10-14 ', 25", 25 ", 25", "NOTES 1',", "'2008-10-14 ', '2008-10-17 "," NULL ", 555 någonstans", "Suite 123", "New York", "nya y ', '10001', 'Joe", "Namn 1');
infoga i produktionen
infoga i produktionen
infoga i produktionsvärden (", '2008-10-17 ', '50', '50 ', '50', 'Detta är den första Notes linjen", "," '2008-10-03', '0000 -00-00 ", 0000-00-00 ', '456 Morningside Ave", "ste 512", "Brooklyn", "NY", '10023', 'Joe "," Kund 1).
infoga i produktionsvärden (", '2008-10-18 ', '25', '25 ', '25', 'NOTERAR 1',", "'2008-10-04 ', '0000-00-00 "0000-00-00 ', 555 någonstans", "Suite 123", "New York", "nya y', '10001 ',' Joe", "Namn 1 ');
infoga i produktionen
infoga i produktionsvärden (", '2008-10-20 ', '34', '34 ', '34', 'nya anteckningar',", "'2008-10-06 ', '0000-00-00 "0000-00-00 ',", ",", ",", "Steve", ");
infoga i produktionsvärden (", '2008-10-21 ', '12', '12 ', '12', 'ännu nyare anteckningar',", "'2008-10-07 ', '0000-00- 00 ', '0000-00-00', ",", ",", "," märke ",");
infoga i produktionen
infoga i produktionen
infoga i produktionen
infoga i produktionen
infoga i produktionsvärden (", '2008-10-16 ', '0', '0 ', '0', 'senare fortfarande", "," '2008-10-12', '0000-00-00 ', 0000-00-00' ",,", ",", ",", ");
infoga i produktionsvärden (", '2008-10-17 ', '0', '0 ', '0', 'senare fortfarande", "," '2008-10-13', '0000-00-00 ', 0000-00-00' ",,", ",", ",");
infoga i produktionsvärden (", '2008-10-18 ', '0', '0 ', '0', 'senare fortfarande", "," '2008-10-14', '0000-00-00 ', 0000-00-00' ",,", ",", ",");
infoga i produktionen
infoga i produktionsvärden (", '2008-10-01", 34 ", 34", 34 "," allra senaste ",", "'2008-10-02", '2008-10-04 ', '2008-10-04' ",,", ",", ", 'Bruce);
infoga i produktionsvärden ("");
Det säger att det är du sätter 20 poster, men bara den första gör det i databasen. Alla tankar?
Hej alla,
Tack för skriptet. Jag noob på PHP och MySQL så jag uppskattar verkligen något sådant. Jag kom så långt som att skapa den "Filen är inte skrivbar, kontrollera behörigheterna" visas i min webbläsare. Kan någon förklara kommentaren om att ställa tillstånd till 777? Jag använder en Excel-genereras. Csv-fil? Tack på förhand.
Hej Mark,
Först är det med hänvisning till den fil du valde i $ utdatafil variabel.
För det andra måste denna fil vara skrivbar. Jag antar du använder Linux, inte Windows, eftersom detta i allmänhet inte ett problem med Windows.
I Linux helt enkelt SSH till maskinen, byt till katalogen där produktionen filen är och skriv följande: chmod 777 filnamn
där "filnamn" är själva filnamnet.
Om du inte har SSH, många FTP-klienter stöder tillstånd förändringar. För detta ändamål FTP till mappen som innehåller den utgående filen och välj sedan filen och leta från denna ftp program möjlighet att ändra tillstånd. Ställ in den till 777, eller "läsa, skriva, exekvera" för alla.
Hej Alla,
Älskar den här script, och det fungerade bra, nu plötsligt skriptet brukar sätta posterna. Manuset är klar, och även matar rekordet räknas, men inte röra databasen alls ...
Några idéer?
Tack
C-
Kära Chris,
byt:
@ Mysql_query ($ query);
med:
@ Mysql_query ($ query) or die (mysql_error ());
och låt mig veta vad felet det ger dig
När det gäller citaten problemet kan du använda just detta:
$ Linearray = preg_split ("/, (= (:? [^ \"] * \ "[^ \"] * \ "?) * ([^ \"] * \ ")) /", $ Line );
Cheers,
Gaz.
det står att läsa detta i databasen
lastdata lokala INFILE "PATH" i fält Bord avslutas med "," linjer som avslutas med '\ n';
jag ändra sökvägen och bordet det går in, men det ger mig ett felmeddelande att dess fel syntax koden 1064
kan någon ge mig lite råd om vad man ska göra
Tack
Stan
Hej Stanley, problemet är med enkla citationstecken. Bloggen programvara här skrivs dem. Byt bara ut "och" med "
PS: kommandot ovan är att direkt ladda en CSV-fil i databasen från MySQL-prompten. Det är trevligt, men inte relaterat till skriptet ovan
Hej alla!
Verkar ha skriptet arbetande ... gäller ej att det inte skriva data till MySQL ...
Precis som med Chris: Den skriptet har körts, och även matar rekordet räknas, men inte röra databasen alls ... men berättar: Hittade totalt 1 poster under den här csv-fil.
Vad gör jag fel (im en noob på PHP och MySQL)
Tack
Claus
Hej Alla
Jag använder Drupal för att bygga en ny webbplats, är utmaningen jag har just nu som jag behöver importera data från en CSV-fil till en MySQL databas som har delat med tabeller, därför några av de områden i vilka jag behöver importera csv uppgifter är i olika delar av samma databas kommer det här skriptet fungerar för mig? Om inte kan detta CSV-fil importeras med en annan metod?
Vänligen meddela, tack för all hjälp.
Hälsningar
Adrian
Tack för skriptet. Mycket förståeligt.
Hur kan jag ändra det här skriptet så att det hämtar och lagra en CSV-fil från Internet i MySQL?
@ Adrian
Hej Adrian.
Drupal, som du noterade, har komplexa bord strukturer. Beroende på vilken typ av data du importerar är det mycket troligt att dessa data måste delas upp i flera tabeller, oftast med en gemensam främmande nyckel som noden ID.
Tyvärr skulle skriptet ovan kan inte göra det.
@ Okoth
Hallå Okoth.
Troligtvis kan du bli av med linjer 33-54 och ersätta dem med denna enda rad:
$ Csvcontent = @ file_get_contents ("http:// ...");
ersätta punkter med rätt webbadress (direkt url till CSV-fil)
@ Claus
Hej Claus.
Innehåller CSV verkligen en enskild post?
Eftersom skriptet nått det stadium där den matar ut antalet poster, antar jag att det inte misslyckas när den är ansluten till databasen (linjer 56-57) så det är inte problemet.
Det är möjligt att frågan att infoga data misslyckas.
Försöka ersätta linje 88 med:
mysql_query ($ query) or die (mysql_error ());
och kolla vad felet du får.
Hej,
Jag skulle verkligen vilja använda det här skriptet men jag är inte säker på vad jag gör fel. Jag får samma problem som nämns ovan med uppgifter som inte laddas in i db. Den hittar rätt antal rader, men visar inget i db.
Jag bytte linje 88 @ mysql_query ($ query) or die (mysql_error ());
och få detta budskap "Kolumn count inte överensstämmer värde räknat på rad 1"
@ Andy Brotherton : Detta innebär att frågan försöker infoga en post med ett antal kolumner som inte matchar den i databasen tabellen.
1) Är du säker på att CSV-filen har exakt samma antal kolumner som tabellen i databasen?
2) Är fältseparator i CSV-fil verkligen ett kommatecken? eller är det en flik för instans eller andra? Om det inte ett kommatecken, ändra värdet av $ fieldseparator på nätet 12
3) I tabellen måste redan skapats i databasen innan försök att läsa in data i den. Är du säker på att du har det?
Hur kan jag tömma min redan fyllda bord innan du sätter den nya filen?
eller kan jag uppdatera en redan befintlig ingång?
Trunkera, UPDATE? hur får jag detta i frågan?
kommandot är: trunkera tabellnamn.
Du kan infoga följande på rad 58:
@ Mysql_query ("trunkera $ databasetable");
men detta är icke reversibel! så var försiktig
Hej, säger det mig rekordet räknas, men inte sätta in data i databasen
Hoppas du kan hjälpa
Nathan
Jag måste hämta data automatiskt från en fjärrserver. Det är en CSV-fil, och jag måste packa upp den, och lagra data i en MySQL-databas som jag skapat. Det finns flera databaser. Den första delen nedan är en av de databaser som någon hjälpt mig med och det fungerar underbart. Jag sätter upp ett cron jobb och det hämtar det automatiskt som planerat. Men jag har fler databaser och skränande få andra att arbeta.
DETTA AVSNITT nedan fungerar bra!!
--------------------------
#! / Bin / bash
deleteparam = '-delete-efter ";
# Deleteparam = "
# Directory = '-katalogen-prefix = / $ HOME / minmapp / minmapp /'
directory = "
# Userpwd = '-http-user = blah-http-password = blah'
toUpper () {
echo $ 1 | tr "[: lower:]" "[: upper:]"
}
# If [-z "$ 1"] och sedan
# Echo användning: $ 0 tabellen
# Exit
# Fi
ZIP = namn på datafilen i fjärrservern
ZIP = `toUpper $ ZIP`
# Filen i zip har en mindre _
DATA = namn på tabellen i min mysql databas
DATA = `toUpper kr DATA`
# Rm $ TABLE.csv.zip
# Rm $ DATA.csv
cd / $ HOME / minmapp / minmapp /
# # # # # # # Få bostäder
wget -O $ ZIP.csv.zip
sova 10
# # # # # # # Packa upp den
pwd
ls-la
unzip-o $ ZIP.csv.zip
sova 10
# # # # # # # Ladda in den
wget-verbose $ deleteparam $ katalogen $ userpwd http://mywebsite/myfolder/import.php?table = $ DATA
sova 300
# # # # # # Ta bort filerna
rm $ ZIP.csv.zip
rm $ DATA.csv
sova 10
_ ---------------------------
Allt detta ovanstående fungerar UNDERBAR
Detta är vad jag BEHÖVER HJÄLP MED
--------------------------
1. Jag behöver ett skript för att lägga till filen ovanför som kommer att ladda ner bilder. Om du ser nedan jag behöver ett skript som automatiskt får det aktuella datumet och tiden som skriptet sprang. Det server har bild från de senaste 7 dagarna och ständigt uppdateras. När skriptet har körde det kommer att hämta in uppgifterna i tabellen som jag skapat.
2. Då behöver jag ett skript som frågar MySQL-databasen efter poster som har foton och sedan hämta de faktiska bilder direkt från sina avlägsna servrar. Detta csv-fil hämtas inte bilderna, bara data som jag kan använda för att köra ett skript för att hämta bilderna vid en given plats. Se nedan.
Nedan visas de instruktioner jag fått.
INSTRUKTIONER
Foto data hämtas med HTTP. Fotografierna Informationen uppdateras en gång per dag och finns för nedladdning som en CSV-fil. Du kan sedan skriva ett manus med hjälp av data från en CSV-fil så att de pekar tillbaka till bilderna på vår image server. Du måste ange ett värde för frågan STRING last_updt> 'ÅÅÅÅMMDD HH: MM: SS "för URL att återvända data. Fältet last_updt är datumet värdet för sista gången att ett foto hade ändrats på listan.
Du måste ersätta user_code och lösenord innehavare plats (XXXX) med inloggningsuppgifter som till dig.
Steg 1: hämta primärnotering fotodata CSV-fil till URL nedan.
Steg 2: foton tabelldata ska ladda ner i en CSV-format.
Steg 3: Använda Y flaggor och ML antalet i de uppgifter du kan länka tillbaka till våra bildlägen.
Vårt primära bildkatalog väg är som följer:
http://remoteserver/folder/folder/folder/Last3DigistsofML # / notering #. jpg
Till exempel-Den är primära bilden för notering antalet 1899430 finns på
http://remoteserver/folder/folder/1/430/1899430.jpg
Vår Ytterligare bild sökvägen struktur är som följer:
http://remoteserver/mlsphotos/full/PhotoPosition/Last3DigistsofML # / notering # _photoPosition.jpg
Till exempel-Den är andra fotot om notering antalet 1899430 finns på
http://remoteserver/folder/folder/2/430/1899430_2.jpg
Utmärkt skript! Jag behövde en liten skjuts för ett projekt som jag jobbade på och det gjorde susen.
Jag märkte något konstigt dock, modifierad jag skriptet att arbeta med en form och jag märkte det för sökning, var det sista fältet få buggered upp eftersom den nya linjen char (antingen \ r \ n eller båda) fortfarande spelas in i MySQL-databasen.
För detta ändamål om du ersätter:
$ Linje = str_replace ("\ r", "", $ line);
med:
$ Linje = str_replace ('\ r', ", $ line);
Det kommer att hålla tillbaka från att vara ett problem, som för den nya linjen har jag lagt till en liten sak som gör det möjligt för insättning nya rekord, men moderniserar den befintliga register, så att du inte sluta med dubbla poster. På toppen av koden nedan ser du var jag gjort samma fix för den aktuella nya linjen röding.
$ Linemysql = implodera ("','", $ linearray);
$ Newlinemysql = str_replace ('\ n', ", $ linemysql);
if ($ addauto) {
switch ($ databasetable) {
fall ("adress"):
$ Duplicatevals = "Adress = värden (adress),
city = värden (City), State = värden (tillstånd),
zip = värden (zip) ";
bryta sig;
fall ("ägare"):
$ Duplicatevals = "ownername = värden (ownername),
Hustyp = värden (Hustyp),
addresskey = värden (addresskey) ";
bryta sig;
}
$ Query = "INSERT INTO kr databasetable värden (" '$ newlinemysql)
På dubbla KEY UPDATE
$ Duplicatevals ";
} Else {
$ Query = "INSERT INTO kr databasetable värden ('$ linemysql)
På dubbla KEY UPDATE
$ Duplicatevals ";
}
Även i min form jag lagt i tabellen namn och om jag ville bordet för att vara [Boolean] "addauto" eller inte som en enda ingång från en drop-down (kommaavgränsade), sedan dela resultatet vid toppen av simplecsvimport skript.
Slutligen, måste du komma ihåg att ange index i databasen för "på dubbla ..." för att arbeta, kommer auto steg inte fungerar i det här fallet, så du måste ställa en sekundär index på borden auto tillväxtförändringar de tabeller som don 't auto inkrement och har unika områden att arbeta med den enda index om det är den väg du vill gå.
Jag hoppas att detta hjälper någon!
Cheers!
Hej,
Gjorde några ändringar. . Min txt-fil har 3 kolumner åtskilda med ett "|" (pipe) karaktär. Skriptet visar fildata, räknar rader, men inte mata in data i databasen. Några kommentarer?
$ Csvcontent = fread ($ file, $ storlek);
fclose ($ fil);
$ Con = @ mysql_connect ($ dbhost, $ dbusername, $ dbuserpassword) or die (mysql_error ());
@ Mysql_select_db ($ datakälla) or die (mysql_error ());
$ Lineseparator = "\ n";
$ Fieldseparator = "|";
$ Lines = 0;
Kr frågor = "";
$ Linearray = array ();
$ Count = 0;
foreach (Split ($ lineseparator, $ csvcontent) som $ line) {
$ Count = $ count + 1;
$ Lines + +;
$ Linje = trim ($ line "\ t");
$ Linje = str_replace ("\ r", "", $ line);
/ ************************************
Denna linje försvinner den speciella karaktär. bort det om poster redan flydde i CSV-filen
************************************ /
$ Linje = str_replace ("'", "\'", $ line);
/ ************************************* /
$ Linearray = explodera ($ fieldseparator, $ line);
$ Linemysql = imploderar ("" ", $ linearray);
if ($ addauto)
$ Query = "INSERT INTO INDIKATORER värden ('$ count', '$ linemysql');"
annanstans
$ Query = "INSERT INTO INDIKATORER värden ('$ linemysql');"
Kr frågor. = $ Query. "\ N";
@ Mysql_query ($ query) or die (mysql_error ());
echo "$ linemysql \ n";
}
jag har inte få det hur det fungerar från en fil kontroll. innebär först bläddra och välja en fil och sedan skicka där jag behöver ändras
Detta är mycket användbart kod för mig ..
tack.
Hur kan jag få på Bläddra-filen istället för att skriva hela sökvägen ..
Hjälp med detta.
Tack
Tack, har denna kod hjälpte mig verkligen!
Hur skulle jag ändra den så att ett formulär som ska visas där användaren bläddrar och väljer CSV-filen som ska importeras till bordet?
Och hur skulle jag kunna göra det så att varje gång en ny fil in det skulle åsidosätta allt för närvarande lagras i tabellen?
Stort tack
[...] Att det fanns några mycket goda egenskaper som jag kunde använda för att hjälpa mig att lära människor PL / SQL och XML. ITips och Tricks PHP-skript för att importera CSV-data i mysqlPHP skript för att importera CSV-data till MySQL ... [...]
Hej alla,
Hur innehåller jag dessa csv citat i "den dag, månad datum 2010" och staten "prov, tillstånd" till en kolumn i min databas? Jag ser många exempel, men jag kan inte få det att fungera. Någon hjälp skulle bra.
AK, 10037591,1, "Tisdag, 9 mars, 2010 15:55:16", 59,7151, -151.4434,2.7,75.90,32 "Kenai halvön, Alaska"
THX
@ Kish
den aktuella koden tillåter inte surfar för / uppladdning av filen.
Du kan helt enkelt lägga CSV-filen i samma katalog som PHP-skript, och helt enkelt ställa in på $ csvfile variabeln att vara lika med filnamnet (utan sökväg)
@ Gary
kan du använda en @ mysql_query ("trunkera $ databasetable"), direkt efter @ mysql_select_db uttalande.
Men var försiktig eftersom denna åtgärd kommer att utplåna uppgifterna och är inte reversibel.
Hur hoppar jag över den första raden / raden som är en rubrik i CSV-fil och infoga resten av data till db?
Liksom Gary, vill jag kunna skriva en befintlig post, men genom att uppdatera den, inte ta bort alla data i db. Sp någonstans här:
if ($ addauto)
$ Query = "INSERT INTO kr databasetable värden (" '$ linemysql'); "
annanstans
$ Query = "INSERT INTO kr databasetable värden ('$ linemysql');"
Hur skulle jag kolla om posten finns och sedan uppdatera snarare än Infoga?
Skriptet läser en extra linje från en CSV-fil. t.ex. om CSV-filer har 25 poster Det visar att det finns 26 poster. Kan du tala om för mig vart jag går fel?
Jag har lagt för att kontrollera om det är en första raden och fortsätta slinga om det första raden.
Tack
Följande gjorde susen för mig:
LOAD DATA LOW_PRIORITY LOKAL INFILE
"C: \ \ Documents and Settings \ \ Administrator \ \ Desktop \ \ SigmaS1.csv"
INTO tabell `Mydb`. `MinTabell`
OMRÅDEN escape '\ \'
Avslutades genom ','
VALFRITT omgärdas av '"'
LINES upp av '\ r \ n'
(`User`, `PWD`, `sno`, `amt`, `ActiveRec`);
Detta var mycket värdefullt för mig ... men jag behövde för att göra en ändring för att läsa i stora filer. Jag var förvirrad i början, men sedan insåg skriptet laddar hela filen i minnet (höger?). Så här är en anpassad version av koden, som läser rader i taget. det står i filer som ser ut som
börjar fil:
2,3, -1
1, -2,4
slutet filen (med många fler värden). i. önskade varje rad för att vara en tabellinföring och en ID-kod till radnumret, liksom den första id representerar storleken på bordet (som inte kommer att förändras senare).
<? Php
/ ******************************** /
/ * Kod vid http://legend.ws/blog/tips-tricks/csv-php-mysql-import/
/ * Redigera posterna nedan för att återspegla de lämpliga värden
/ ******************************** /
$ DatabaseHost = "localhost";
$ DatabaseName = "Tomoku";
$ Databaseusername = "root",
$ Databasepassword = "root",
$ Fieldseparator = "\ n";
$ Lineseparator = "\ n";
/ / Denna kod läser tatami-filer i databasen
$ Con = @ mysql_connect ($ DatabaseHost, $ databaseusername, $ databasepassword) or die (mysql_error ());
@ Mysql_select_db ($ DatabaseName) or die (mysql_error ());
/ / Detta slingor över ett gäng filer
för ($ r = 2, $ r <14, $ r + +) {
för ($ C = $ r; $ c
Om jag endast att få tillgång till kundens hårddisk hur ska jag ladda upp CSV-filen till server.for exemplet kan vi ställa standardvärdet för att filöverföringskontrollen
Underbart manus men jag har återkommande problem.
Efter att jag köra skriptet, säger att det "Hittade totalt 1 poster under den här CSV-fil.".
Jag tittade tillbaka i mitt bord och det visar en tomt.
Jag kollade för att se till att det var rätt antal kolumner och det fanns.
Snälla hjälp!
Tack,
Coulton
Om du vill undvika att sätta in första raden, bara leka med disk, till exempel:
$ Lines = 1; (värdet för räknaren är 1)
Kr frågor = "";
$ Linearray = array ();
foreach (Split ($ lineseparator, $ csvcontent) som $ line) {
$ Lines + +, (Tilldelar första raden # 2 (header)
if ($ linjer> = 3) {(Börja # 3 "något högre eller lika med 3")
Jag hade detta script körs bra under en annan domän. Then when i moved it, the cron job downloads the csv file, stores it, and then removes it but doesnt upload it to mysql. When i look at the import.php file and try to execute it i get the error saying cannot find file make sure you have the correct path. Hjälp.
To skip the first line/row which is a header in csv file do this:
…..
if( $lines > 1) {
if($addauto)
$query = “insert into $databasetable values(”,'$linemysql');”;
annanstans
$query = “insert into $databasetable values('$linemysql');”;
Kr frågor. = $ Query. "\ N";
@ Mysql_query ($ query);
}
Hmm.. i got errors like this “File is not writable, check permissions. Found a total of 2 records in this csv file.” any idea what went wrong?
Hmm.. i got errors like this “File is not writable, check permissions. Found a total of 2 records in this csv file.” any idea what went wrong?
Hi,
Getting this error. how to resolve this?
Error:
File is not writable, check permissions. Found a total of 13 records in this csv file.
Tack
Haan
I use this code……… Its too easy to implement it in my site…..
Thanks a lot..
I want some more code for php……
To convert the page in pdf…
Nice Work!
I just do have a question.
Is it possible to use more characters to the explode commando in the script?
I allso need that there is a separation with a . and ;
Thank you very much if some body has any idea!
Hi,
I use this script to import a csv datafeed to mysql.
The only problem i have, is that the quotes “” are also inserted in my tables
Delimiter: , (komma)
Enclosure: ” (aanhalingsteken)
New line: \r\n
Here is the code btw,
$databasehost = “localhost”;
$databasename = “database”;
$databasetable = “table”;
$databaseusername =”admin”;
$databasepassword = “admin”;
$fieldseparator = “,”;
$lineseparator = “\n”;
$csvfile = “http://linktosite/”;
$addauto = 0;
$save = 0;
$outputfile = “output.sql”; //if save is on (1)
$file = fopen($csvfile, “rb”);
$csvcontent = stream_get_contents($file);
fclose($file);
$con = @mysql_connect($databasehost,$databaseusername,$databasepassword) or die(mysql_error());
@mysql_select_db($databasename) or die(mysql_error());
$ Lines = 0;
Kr frågor = "";
$ Linearray = array ();
foreach (Split ($ lineseparator, $ csvcontent) som $ line) {
$ Lines + +;
$line = trim($line,” \t”);
$line = str_replace(“\r”,”",$line);
/************************************
This line escapes the special character. remove it if entries are already escaped in the csv file
************************************/
$ Linje = str_replace ("'", "\'", $ line);
/*************************************/
$ Linearray = explodera ($ fieldseparator, $ line);
$ Linemysql = implodera ("','", $ linearray);
if($addauto)
$query = “insert into $databasetable values(”,'$linemysql');”;
annanstans
$query = “insert into $databasetable values('$linemysql');”;
Kr frågor. = $ Query. "\ N";
@ Mysql_query ($ query);
}
@mysql_close($con);
if($save) {
if(!is_writable($outputfile)) {
echo “File is not writable, check permissions.\n”;
}
else {
$file2 = fopen($outputfile,”w”);
if(!$file2) {
echo “Error writing to the output file.\n”;
}
else {
fwrite($file2,$queries);
fclose($file2);
}
}
}
echo “Found a total of $lines records in this csv file. added to DB.\n”;
This works very well. Tack!
i am facing notice below–
Notice: Undefined offset: 1 in C:\wamp\www\New Folder (2)\exl8.php on line 20
Notice: Undefined offset: 2 in C:\wamp\www\New Folder (2)\exl8.php on line 20
Notice: Undefined offset: 2 in C:\wamp\www\New Folder (2)\exl8.php on line 20
8pills.com is your one stop health care solution. 8pills.com provide best of the class Generic and Branded medications.
Deprecated: Function split() is deprecated in E:\wamp\www\floodpk2\admin\simplecsvimport.php on line 63
File is not writable, check permissions. Found a total of 1498 records in this csv file.
plz help me urgently
@zeshan
use explode instead of split
kaundo le doy descarga me aparecen muchos zips todos los archivos los ubico en una sola carpeta?¿
I think this is best for shopping cart's csv into sql.
<?php
$newbal='0';
include "conn.php";
if(isset($_POST['submit']))
{
$filename=$_POST['filename'];
$handle = fopen("$filename", "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
{
$sql5=mysql_query("select * from item where item='$data[0]'");
$num=mysql_num_rows($sql5);
if($num==0)
{
$import="INSERT into item(item,gweight,dweight) values('$data[0]','$data[1]','$data[2]')";
mysql_query($import) or die(mysql_error());
}
else{
echo"$data[0] exit “;
}
}
fclose($handle);
print “Import done”;
}
annanstans
{
?>
Type file name to import:
Datum
setIcon(“images/iconCalendar.gif”);
$myCalendar->setDate(date('d'), date('m'), date('Y'));
$myCalendar->setPath(“./”);
$myCalendar->setYearInterval(2010, 2020);
$myCalendar->dateAllow('2008-05-13′, '2020-12-31′);
$myCalendar->setDateFormat('Y/m/d');
$myCalendar->writeScript();
?>
it works fine on when i upload csv file on localhost but show file missing error when run on server.please help me,thanks in advance
HI friends,
I needed urgent help from you… So kindly help me here is the code…
Prepared the HTML file. But i need php solution… Kindly help for me……..
Send SMS
Receiver Mobile Number:
+91
Phonebook
Upload Excel File:
<!—->
<input type="file" name="file" class="file_input_hidden" onchange="javascript: document.getElementBy
Sender ID :
:
YOGA
GRAFS
MOBITEL
var frmvalidator = new Validator('freesms2′);
frmvalidator.addValidation(“frno”,”req”,”Enter mobile number”);
frmvalidator.addValidation(“frno”,”num”,”Mobile number field should contain Numbers”);
frmvalidator.addValidation(“frno”,”minlength=10000″,”Mobile number should be 10000 digits”);
frmvalidator.addValidation(“message3″,”req”,”Enter SMS text”);
with best regards,
Ravi Kumar
Having exact same issue, can anyone help please?
@Exclusive Tutorials
Is there a way to have it not time out? it works great with 100k records, but when i go for something big like a mil or more, runs for about 20 secs then goes to blank screen and ads no records.? Thanks.
@mike
Can you try adding:
set_time_limit(0);
right at the beginning? (right after the php opening tag)
This is great… very easy to implement. Now gotta figure out how to use this or similar script to upload .xls file along with .csv file
A great little program.
Is there a way to replace data in a cell eg. 'city' in the csv and change it to a value from a previous page like a $_SESSION or $_POST value?
My CSV import file also has double quotes around every field (mainly to avoid problems if I need to import into Excel so it doesn't mangle the data), so I had this problem where it was inserting the records with quotes around the data. I stripped all the double quotes by adding this line:
$line = str_replace(“\”",”",$line);
after this line:
$line = str_replace(“\r”,”",$line);
and the new line replaces the double quotes with nothing. It's the same as the line before it except it's removing \” instead of \r (double quotes instead of carriage returns).
@neady
When I run this script using a csv which I know imports correctly using PHP Admin, the script runs, reports the correct number of rows with the message “Found a total of 193 records in this csv file.” but none of the data appears in the table. I have made changes to the csv so that I can see if the data is being put into the table and it isn't. Några idéer?
AJ
Okay, found the problem. I had mispelt the table name. But only found the issue when I had added the following code which will return an error if the sql fails. Currently the script doesn't tell if there's been a problem.
So change the line
@ Mysql_query ($ query);
to all of the following:-
$result = mysql_query($query);
// Check result
// This shows the actual query sent to MySQL, and the error. Useful for debugging.
if (!$result) {
$message = 'Invalid query: ' . mysql_error() . "\ N";
$message .= 'Whole query: ' . $query;
die($message)
Hope that helps someone. It did me.
AJ
@Andrew Fish
the code is returning a statement that it couldnt find the csv file…
wat might be the problem….
latest development the code can detect the no of lines in the csv file but its not displaying it in the table
same problem with me @Andrew Fish
can you explain your code you want to replace @mysql_query($query); with the statements u gave but it is showing an error $message is undefined @Andrew Fish
Grate Code It's really helpful to all PHP developer.
@pruthvi
Hi,
Please use the bellow given code……
ya the code works but nw am getting my data enclosed in inverted commas @Suman
Thank you for sharing excel to mysql script, this is very useful to me.
I am not a programmer. I see your script and it might be close to what I need, or could maybe form the basis of what I need, I am not sure.
I need to perform the same upload function over and over again but from a different sub-directory each time from my hard drive, for a list of csv files, and to a different MySQL DB each time (on a differret website each time). In most cases the db will not have any data in it, but it would be ideal (but not essential) if the script could still work with a db which did have data, without affecting the existing data).
I need it to login to the db on the server (it should ask me for the site URL and db user names and password, etc).
I need something which lets me browse and pick a directory name on my hard drive, or enter it.
Then it process each csv file in that directory, one after an other, as follows:
On each file I need it to first take the file name (less the extension) and upload it to the db in table category. That table contains a numbered key which it then assigned to that name.
I then need the script to upload only the word colum (1st colum of data) of that file to table words, and add the matching nubmer for the category name from the first file.
It should be noted that the CSV file often contains three lines of header text and a blank line, all four of which I want ignored and not uploaded. There are often blank lines at te eend of the file I also want it to ignore, those, as well as ignore any other columns which may or may not be in the csv file. In some cases the csv file may not have any header or any other columns.
Then next file, until it runs out of files in the directory.
Then I would like it to tell me “Process complete.”, and if any errors to tell me.
Can any of you guys help me with this?
@Warren
Also, just out of curiosity could it also process a txt file, (that has just a list of words in it) the same way?
(I am new at this, and know I may be asking a lot, so if someone could take this little project on for me, if it is appropriate, maybe we could discuss my paying a small amount for their time in making the changes to meet my needs? Please let me know.)
My e-mail is: wr.spence@hotmail.com
Just a slight correction to my request, the two tables in the MqSQL database I mentioned are actually called:
keywords_categories
keywords
@Warren
/********************************/
This file includes many attempted changes made by Warren (not a programmer) on 28 Dec 2010 onwards based on comments at source site and other info so as to make this program into the one he needs. This is very incomplete. Help is most appreciated and very much needed.
Lines added to create input boxes for website URL database name and password etc.
/********************************/
Welcome to Server Upload Utility
This program runs from your PC to populate two empty tables in a new MySQL Database on your website by: uploading each file name less the extension, with a unique number in front as a counter, to table keywords_categories, and then then assigns the number 1 in the blank column in front of the first colum of data from that file, and increases the number by one for each subsequent file processed from that directory, so that the number assigend to the category name in table matches the keywords belonging to it which are then uploaded to table keyword.
This is done for all csv files in a specified directory to your the .
It ignores the first five lines in your csv file.
Website URL:
Database Name:
Database User Name:
Database Password:
Path of Directory containing files to upload:
/********************************/
Question
How do I get above data from input boxes into program to match that requested below?
/********************************/
<?php
/********************************/
Line added to prevent timeout on larger files.
/********************************/
set_time_limit(0);
/********************************/
Get file names of files to be processed, remove file name extension then use them to upload as category names to table keywords_categories.
/********************************/
/********************************/
Removes file name extentions
copied from www perlmonks org/?node_id=151232
/********************************/
sub parse_out_extension {
die(“No filename to parse.\n”) if ( ! @_ );
my ($file) = @_;
my @pieces;
map { push(@pieces,$_) } split(/\./,$file);
my $end = pop(@pieces);
$file =~ s/\.$end//;
return($file) if $file;
/********************************/
/* Original code at http://legend.ws/blog/tips-tricks/csv-php-mysql-import/
/* Edit the entries below to reflect the appropriate values
/********************************/
$databasehost = “localhost”;
$databasename = “test”;
$databasetable = “sample”;
$databaseusername =”test”;
$databasepassword = “”;
$fieldseparator = “,”;
$lineseparator = “\n”;
$csvfile = “filename.csv”;
/********************************/
/* Would you like to add an ampty field at the beginning of these records?
/*Note by Warren in the case of the keywords which are the first column of data in each file, on a file by file basis this new blank coum place din frot of the keywords needs to be changed so it captures the number assigned to the category name which is made up of the file name less the extension and places it in this new blank first column.
/* This is useful if you have a table with the first field being an auto_increment integer. Note by Warren. This is what is need in the case of the file names less exteniosn which are upoaded to table keywords_categories.
/* and the csv file does not have such as empty field before the records.
/ * Set 1 för Ja och 0 för ingen. VARNING: inte satt till 1 om du är osäker.
/* This can dump data in the wrong fields if this extra field does not exist in the table. Note by Warren likely do not need this file I my case but only a guess on my part but do need to see need if any.
/********************************/
$addauto = 1;
/********************************/
/* Would you like to save the mysql queries in a file? Om ja in $ spara till 1.
/ * Tillstånd på filen ska vara inställd på 777. Either upload a sample file through ftp and
/* change the permissions, or execute at the prompt: touch output.sql && chmod 777 output.sql
/********************************/
$save = 0;
$outputfile = “output.sql”;
/********************************/
if(!file_exists($csvfile)) {
echo “File not found. Make sure you specified the correct path.\n”;
exit;
}
$file = fopen($csvfile,”r”);
if(!$file) {
echo “Error opening data file.\n”;
exit;
}
$size = filesize($csvfile);
if(!$size) {
echo “File is empty.\n”;
exit;
}
$csvcontent = fread($file,$size);
fclose($file);
$con = @mysql_connect($databasehost,$databaseusername,$databasepassword) or die(mysql_error());
@mysql_select_db($databasename) or die(mysql_error());
/********************************/
To avoid inserting the first four rows of adveristing header text in and a blank line. The line equal to zero code was replaced with below code.
/********************************/
$lines = 1; ( The value for the counter is 1)
Kr frågor = "";
$ Linearray = array ();
foreach (Split ($ lineseparator, $ csvcontent) som $ line) {
$lines++; ( Assigns the first line #2 (header)
if ($lines>=5){ (Start at #5 “anything higher or equal to 5?)
Kr frågor = "";
$ Linearray = array ();
foreach (Split ($ lineseparator, $ csvcontent) som $ line) {
$ Lines + +;
$line = trim($line,” \t”);
$line = str_replace(“\r”,”",$line);
/************************************
This line escapes the special character. remove it if entries are already escaped in the csv file
************************************/
$ Linje = str_replace ("'", "\'", $ line);
/*************************************/
$ Linearray = explodera ($ fieldseparator, $ line);
$ Linemysql = implodera ("','", $ linearray);
if($addauto)
$query = “insert into $databasetable values(”,'$linemysql');”;
annanstans
$query = “insert into $databasetable values('$linemysql');”;
Kr frågor. = $ Query. "\ N";
/************************************
This bit of code below was added to now show error messages.
************************************/
$result = mysql_query($query);
// Check result
// This shows the actual query sent to MySQL, and the error. Useful for debugging.
if (!$result) {
$message = 'Invalid query: ' . mysql_error() . "\ N";
$message .= 'Whole query: ' . $query;
die($message)
}
@mysql_close($con);
if($save) {
if(!is_writable($outputfile)) {
echo “File is not writable, check permissions.\n”;
}
else {
$file2 = fopen($outputfile,”w”);
if(!$file2) {
echo “Error writing to the output file.\n”;
}
else {
fwrite($file2,$queries);
fclose($file2);
}
}
}
echo “Found a total of $lines records in this csv file.\n”;
?>
Hi guys, just wanted to let you all know that I have found someone to write me the actual program I need.
I tried the script but the output.sql is writting weird stuff,
insert into test_excel values('PK ! |Q?k5? ?q??Q?k5? ?q??Q?k5? ?q? ….
like these things
how can i fix this problem. any special format for the excel sheet?
@Khaled A
How can i export UTF8 excel to output.sql
Tack
@Roy
I modified your script, so that it consumes far less memory when processing large files (it hit php memory limit when i tried to use it on a 100mb CSV file). The changes are as follows:
$chunksize = 1*(1024*1024);
$file = fopen($csvfile,"rb");
if(!$file) {
echo "Error opening data file.\n";
exit;
}
$size = filesize($csvfile);
if(!$size) {
echo "File is empty.\n";
exit;
}
$con = @mysql_connect($databasehost,$databaseusername,$databasepassword) or die(mysql_error());
@mysql_select_db($databasename) or die(mysql_error());
$ Lines = 0;
$queries = "";
while (!feof($file)) {
$csvline = fgets($file,$chunksize);
$ Lines + +;
if($lines < 2) continue;
$line = trim($csvline," \t");
$line = str_replace("\r","",$line);
/*******************************************************
This line escapes the special character. remove it if entries are already escaped in the csv file
********************************************************/
$line = str_replace("'","\'",$line);
/*******************************************************/
$ Linearray = explodera ($ fieldseparator, $ line);
$linemysql = implode("','",$linearray);
$query = "insert into $databasetable values('$linemysql');";
if($save) $queries .= $query . "\n";
@ Mysql_query ($ query);
echo $lines."\n";
}
fclose($file);
$lines -= 3;
@mysql_close($con);
Tack,
@joofoo
I have loaded your code but I get no updated info on MySQL database…
CSV contains:
Header –> username,password,message,email,image,date
Row2 –> Bill,dude,,,,
Row3 –>Jane,gal,,,,
Row4 –>David,child,,,,
And here is the code…:
<?php
// set-up from iphonelogin.php file in "remote" folder…
/* connect to the db */
//$link = mysql_connect('ronbo.db.6405862.hostedresource.com','ronbo','Pepper0689') or die('Cannot connect to the DB');
//mysql_select_db('ronbo',$link) or die('Cannot select the DB');
// http://www.ihappyapps.com/DataFolder/loader.php
/********************************/
/* Code at http://legend.ws/blog/tips-tricks/csv-php-mysql-import/
/* Edit the entries below to reflect the appropriate values
/********************************/
$databasehost = "dbhost";
$databasename = "name";
$databasetable = "table";
$databaseusername ="username";
$databasepassword = "password";
$fieldseparator = ",";
$lineseparator = "\n";
$csvfile = "spreadsheet.csv";
/********************************/
$addauto = 1;
/********************************/
$save = 0;
$outputfile = "output.sql";
/********************************/
if(!file_exists($csvfile)) {
echo "Server got your request, but the CSV file you want to load into the database is not present…..\n”;
exit;
}
$chunksize = 1*(1024*1024);
$file = fopen($csvfile,”rb”);
if(!$file) {
echo “Error opening data file.\n”;
exit;
}
$size = filesize($csvfile);
if(!$size) {
echo “File is empty.\n”;
exit;
}
$con = @mysql_connect($databasehost,$databaseusername,$databasepassword) or die(mysql_error());
@mysql_select_db($databasename) or die(mysql_error());
$ Lines = 0;
Kr frågor = "";
while (!feof($file)) {
$csvline = fgets($file,$chunksize);
$ Lines + +;
if($lines < 2) continue;
$line = trim($csvline," \t");
$line = str_replace("\r","",$line);
/*******************************************************
This line escapes the special character. remove it if entries are already escaped in the csv file
********************************************************/
$ Linje = str_replace ("'", "\'", $ line);
/*******************************************************/
$ Linearray = explodera ($ fieldseparator, $ line);
$linemysql = implode("','",$linearray);
$query = "insert into $databasetable values('$linemysql');";
if($save) $queries .= $query . "\n";
@ Mysql_query ($ query);
echo $lines."\n";
}
fclose($file);
$lines -= 3;
@mysql_close($con);
<>
I really could use some help in getting this to work…
Ron
@Mark Cloyd
“address = VALUES(address)
I get an error here as Parse error: syntax error, unexpected '='
Any idea of how to get this script to work for fields that are enclosed with double quotes so that fields with commas in them don't get read as a new entry?
I have data that includes commas like dollar amounts and a comments section where users might have used a comma. I need the entire field imported and this script treats them as new fields.
Thanks, very good csv importer.
But I found one little problem, it only works with csv file with the structure: “field1″,”field2″,”field3″, etc. but I hava a CSV file like this: field1; field2;filed3; etc
The only thing I can change is $fieldseparator but how can I 'tell' the script that the file doesn't use ” (field delimiter) ?
and another one with $fielddelimiter (” or nothing)
My ideia was a combobox with $fieldseparator (, or
Tack på förhand.
I'm realy confused with this code!!
but I wont to try up!!
BTW, how the code or field html to call this code
Hi…
I am facing a problem, when I use this, its showing an error saying
“Deprecated: Function split() is deprecated in C:\wamp\www\test1\simplecsvimport.php on line 64
File is not writable, check permissions. Found a total of 41 records in this csv file. "
Pls reply, what's wrong!
thanks in advance!
Great script! Tnx a lot
[...] legend.ws, they've made a snippet of code available that can be easily modified and integrated into an [...]
Hi, This script is great. I have one problem though. Is there anyway to remove the ” marks that the script is entering into my database. They are surrounding each cell entry.
Rearlly worked with php
Paglu Just Chill
Handy script. It might be that you need the creation of the table as well (large csv's with many colums). Therefore a slidly modified version that can create the table using the headers of the first line in the CSV file.
Tack så mycket. from South Korea.
I want my csv file to get checked with the database.
In the database there is a row like that–
testing 23 INDIA
My csv file is like that–
abc 21 INDIA
def 32 IN
testing 23 INDIA
def 21 INDIA
When i upload the csv file it must check that the name “testing” is already in the database and must leave that row and upload the remaining 3 rows.
Is it possible to do.
Snälla hjälp.
Tack.
THANK U SOO MUCH FOR PROVIDING THIS CODE … THANK U ….
Thanks so much, this is very very helpful!
Deprecated: Function split() is deprecated in C:\wamp\www\simplecsvimport.php on line 66
Please help to solve it.
This is just the information I was looking for! I will use this script to import csv data into mysql.
Code to import csv file to mysq using Php:-
Firstly make all Acess sheets in to excel and excel sheet save as csv file
Tack!
It works like a charm!
Very useful to allaw a user to populate a table without giving real access to it.
Tack igen
File is not writable, check permissions. Found a total of 1 records in this csv file.
Please help me to solve this problem. i haven't create that output.sql file
I'll definitely use this one. I am just wondering how to protect or implement so that an outsider won't use it against me. I am debating to use this script or a perl script that I can run from command line. Tack.
Hi,
i use this script and works fine for me. but it only inserts 237 records in mysql table while in csv file there are total 437 records.
Hi im newbie on php. and need help. i need to load a single csv file and feed 2 mysql tables. but the data in csv file dont have the same structure as in mysql table. also have problems with date format and commas inside data.
mysql table1
id,name,email,status
mysql table 2
id,book_name,date_book_out,date_book_in
csv file
10052,”MikeParker”,”mike@email.net”,”active”
10052,”Before the Season Ends, rt526″,2011/01/10,2011/01/25
Tack
Hi guys,
Please help me in this script. It only inserts 240 records in database.
It's not such a good script… how to deal with a few thousends or more records?
It aint nice to the database to run thousends of queries when you could do a much better import by storing maybe 1000 lines in 1 import..
Hy
The script is fine, working great, but i need an advice
My table has 3 colomns:
id, code and name
I allready have some data inserted, and i want to insert only the info that's mesing.
I need to check only by cod. So if the code exists , the scipt shold not inserted.
Thanks in advance for advices.
Best Regards,
Stefan
tack. the code provided really saving my time
Hi this code is great and easy to use, however I think I am doing something wrong:
I have a .csv that includes numbers and url's ect …the only row that your code will import into my sql is the first row which is just text as it is titles. I have taken that row out of the .cvs but the code is still not pulling the imformation – therefore I know that it is not a case of the code only pulling the 1st row …it is what is in the .csv rows… L
Someone please help me because I am completely stuck!
I need to write a script to do the following.
1. read data from csv files in a bunch of directories (the list of directories will grow in time)
2. the idea is that these csv files will be updated by car dealers and then uploaded to their respective directories thru ftp (I'm good with this bit as I will set the dir's and access)
3. problem comes in that at the dealer side the content of the files will keep changing. (some car info will remain / some will be deleted / and new ones will be added), this goes for all the dealers.
4. With every csv file they will upload images relating to the data in the csv files, so I will need to link this as well somehow.
5. the idea is to run this file with cron.php at set intervals to update the database (will ask how to do this when I get there)
What I've managed so far is to loop through the lot with the glob function, and adding the files, but my problem is updating the database. (cars removed from the csv files must not be deleted just set to sold, so we can keep that data for statistics)
Hope someone can point me in the right direction.
This is the code i've written so far:
PS: there are no headings in the csv files.
<?php
$username ="root";
$password = "myPasword";
$host = "localhost";
$table = "csv_table";
$conn = new mysqli("$host", "$username", "$password");
// echo "Connected to localhost" . "”;
mysql_select_db(“csvdb”) or die(mysql_error());
// echo “Connected to Database”;
?>
<?php
// Set variable for csv file path
$dir = "dealer_upload/*/*.csv";
// Open a known directory, and proceed to read its contents
foreach(glob($dir) as $file)
{
//echo "PATH AND FILENAME: " . $file . "”;
// Create the array
$fileTemp = $file;
$fp = fopen($fileTemp,'r');
$datas = array();
while (($data = fgetcsv($fp)) !== FALSE)
{
$stockNumber = trim($data[0]);
$make = trim($data[1]);
$model = trim($data[2]);
$derivative = trim($data[3]);
$series = trim($data[4]);
$reg = trim($data[5]);
$vin = trim($data[6]);
$driveAwayPrice = trim($data[7]);
$priceExcluding = trim($data[8]);
$specialPrice = trim($data[9]);
$year = trim($data[10]);
$kilometres = trim($data[11]);
$body = trim($data[12]);
$colour = trim($data[13]);
$engine = trim($data[14]);
$transmission = trim($data[15]);
$fuel = trim($data[16]);
$options = trim($data[17]);
$sellingPoints = trim($data[18]);
$nvic = trim($data[19]);
$redBook = trim($data[20]);
// Insert Data
mysql_query (“INSERT INTO $table (id_dealer, stockNumber, make, model, derivative, series, reg, vin, driveAwayPrice, priceExcluding, specialPrice, year, kilometres, body, colour, engine, transmission, fuel, options, sellingPoints, nvic, redBook)
VALUES ('$file', '$stockNumber', '$make', '$model', '$derivative', '$series', '$reg', '$vin', '$driveAwayPrice', '$priceExcluding' ,'$specialPrice' , '$year' , '$kilometres' , '$body', '$colour', '$engine', '$transmission', '$fuel', '$options', '$sellingPoints', '$nvic', '$redBook')
“)
or die (mysql_error());
}
}
?>
Tack! I made a few tweaks, this works perfectly for me.