-
Е
fgets()
най-добре да използвате за това? Това е добър начин да го направите. Друга възможност е да прочетете целия файл в масив сfile()
, след това обиколете масива сforeach()
. -
Трябва ли да включа обратно извикване? Не. Просто изпълнете заявката, след като прочетете всяка партида редове от файла.
-
Откъде да започна? Когато броячът достигне размера на партидата, изпълнете заявката. След това задайте брояча обратно на
0
и задайте низа на заявката обратно към първоначалната стойност. И накрая, в края на цикъла ще трябва да изпълните заявката с останалите стойности (освен ако размерът на файла е точно кратен на размера на партидата, в който случай няма да остане нищо).
$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);
}