Autor Zpráva
jtfcobra
Profil
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
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
Presne tak skonci driv timeout
Keeehi
Profil
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);
A nebo to vkládej naněkolikrát, nejdříve první půlku a pak tu druhou.
Kajman
Profil
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
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>

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: