| 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: 9 let
|
|||
0