Autor | Zpráva | ||
---|---|---|---|
jtfcobra Profil |
#1 · Zasláno: 10. 11. 2016, 13:15:37
Import položek z CSV do DB viz priloha moc nefunguje?
mam 56000 zaznamu a dojde k ulozeni pouze 35000 zaznamu <!doctype html> <html> <head> <meta charset="utf-8"> <title>Import</title> </head> <body> <?php ini_set('memory_limit', '1024M'); $filename = "lekyy.csv"; ini_set ('memory_limit', filesize ($filename) + 4000000); // ini_set('max_execution_time', '360'); require_once('connect.php'); $mysqli = new mysqli($hostname_test, $username_test, $password_test,$database_test); $mysqli->query("DELETE FROM vmt.databaze_leky",$db); $fh = fopen("lekyy.csv", "r") or die('nelze otervit soubor'); while ($line = fgetcsv($fh, 8192, ";")) { $a1 = $line[0]; $a2 = $line[1]; $a3 = $line[47]; $a4 = $line[48]; $a5 = $line[49]; $a6 = $line[50]; $a7 = $line[51]; $a8 = $line[2]; $a9 = $line[5]; $a10 = $line[6]; $a11 = $line[46]; echo 'SUKL:'.$a1.'<br>'; echo 'Nazev:'.$a2.'<br>'; echo 'Vyrobil:'.$a3.'<br>'; echo 'Web vyrobce:'.$a4.'<br>'; echo 'Mail vyrobce:'.$a5.'<br>'; echo 'Telefon vyrobce:'.$a6.'<br>'; echo 'Odkaz na lek:'.$a7.'<br>'; echo 'Doplnek:'.$a8.'<br>'; echo 'Velikost:'.$a9.'<br>'; echo 'Sila:'.$a10.'<br>'; echo 'EAN:'.$a11.'<br>'; // Vlozeni do DB $query = "INSERT INTO vmt.databaze_leky (kodsukl,nazev,vnazev,vweb,vmail,vtel,spc_pil,doplnek,velikost,sila,ean) VALUES ('$a1','$a2','$a3','$a4','$a5','$a6','$a7','$a8','$a9','$a10','$a11')"; $result = $mysqli->query($query); } echo mysqli_errno($mysqli) . ": " . mysqli_error($mysqli) . "\n"; fclose($fh); $mysqli->close(); echo 'Dokončeno'; ?> </body> </html> |
||
TomášK Profil |
#2 · Zasláno: 10. 11. 2016, 13:20:13
A vypíše se 'dokončeno'? Tipuju, že to skončí timeoutem dřív než to celé doběhne. Pro načítání dat z CSV do MySQL je vhodné použít dev.mysql.com/doc/refman/5.7/en/load-data.html, je-li to možné.
|
||
jtfcobra Profil |
#3 · Zasláno: 10. 11. 2016, 13:22:09
Presne tak skonci driv timeout
|
||
Keeehi Profil |
#4 · Zasláno: 10. 11. 2016, 14:54:16
Dá se zvýšit max_execution_time, nebo to nevkládat po jednom záznamu ale třeba po tisíci.
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9); |
||
Kajman Profil |
#5 · Zasláno: 10. 11. 2016, 15:08:59
jtfcobra:
Pozor na to, že nemáte ošetřené řetězce! Chybu vkládání si kontrolujte a vypisujte pro každou položku, ne jen pro poslední. Rychlejší bude řešení z [#2]. |
||
jtfcobra Profil |
#6 · Zasláno: 10. 11. 2016, 19:29:11
Predelal jsem to takto...
Jak mam udelat ze budu vkladat treba 1000 zaznamu najednout? <!doctype html> <html> <head> <meta charset="utf-8"> <title>Import</title> </head> <body> <?php ini_set('memory_limit', '2024M'); $filename = "lekyy.csv"; ini_set ('memory_limit', filesize ($filename) + 4000000); // ini_set('max_execution_time', '1400'); require_once('connect.php'); $mysqli = new mysqli($hostname_test, $username_test, $password_test,$database_test); $mysqli->query("DELETE FROM vmt.databaze_leky",$db); $fh = fopen("lekyy.csv", "r") or die('nelze otervit soubor'); while ($line = fgetcsv($fh, 16192, ";")) { $a1 = $line[0]; $a2 = $line[1]; $a3 = $line[47]; $a4 = $line[48]; $a5 = $line[49]; $a6 = $line[50]; $a7 = $line[51]; $a8 = $line[2]; $a9 = $line[5]; $a10 = $line[6]; $a11 = $line[46]; /* echo 'SUKL:'.$a1.'<br>'; echo 'Nazev:'.$a2.'<br>'; echo 'Vyrobil:'.$a3.'<br>'; echo 'Web vyrobce:'.$a4.'<br>'; echo 'Mail vyrobce:'.$a5.'<br>'; echo 'Telefon vyrobce:'.$a6.'<br>'; echo 'Odkaz na lek:'.$a7.'<br>'; echo 'Doplnek:'.$a8.'<br>'; echo 'Velikost:'.$a9.'<br>'; echo 'Sila:'.$a10.'<br>'; echo 'EAN:'.$a11.'<br>'; */ // Vlozeni do DB $query = "INSERT INTO vmt.databaze_leky (kodsukl,nazev,vnazev,vweb,vmail,vtel,spc_pil,doplnek,velikost,sila,ean) VALUES ('$a1','$a2','$a3','$a4','$a5','$a6','$a7','$a8','$a9','$a10','$a11')"; $result = $mysqli->query($query); } echo mysqli_errno($mysqli) . ": " . mysqli_error($mysqli) . "\n"; fclose($fh); $mysqli->close(); echo 'Dokončeno'; ?> </body> </html> |
||
Časová prodleva: 8 let
|
0