-
Je
fgets()nejlepší k tomu použít? Je to dobrý způsob, jak to udělat. Další možností je načíst celý soubor do pole pomocífile(), pak smyčku přes pole pomocíforeach(). -
Musím začlenit zpětné volání? Ne. Stačí provést dotaz po přečtení každé dávky řádků ze souboru.
-
Kde začít? Když čítač dosáhne velikosti dávky, proveďte dotaz. Poté nastavte počítadlo zpět na
0a nastavte řetězec dotazu zpět na počáteční hodnotu. Nakonec na konci cyklu budete muset provést dotaz se zbývajícími hodnotami (pokud velikost souboru nebyla přesným násobkem velikosti dávky, v takovém případě nezůstane nic).
$batch_size = 100;
$counter = 0;
//instead of executing query one by one,
//let us prepare 1 SQL query that will insert all values from the batch
$sql_prefix ="INSERT INTO workorderstest(id,parentid,f1,f2,f3,f4,f5,f6,f7,f8,f9,f10) VALUES ";
$values = "";
while (($line = fgets($handle)) !== false) {
$values .= "($line),";
$counter++;
if ($counter == $batch_size) {
$values = substr($values, 0, strlen($values) - 1);
$conn->query($sql_prefix . $values) or die($conn->error);
$counter = 0;
$values ="";
}
}
if ($counter > 0) { // Execute the last batch
$values = substr($values, 0, strlen($values) - 1);
$conn->query($sql_prefix . $values) or die($conn->error);
}