-
Apakah
fgets()
yang terbaik untuk digunakan untuk ini? Ini cara yang bagus untuk melakukannya. Pilihan lain adalah membaca seluruh file ke dalam array denganfile()
, lalu ulangi array denganforeach()
. -
Apakah saya perlu memasukkan panggilan balik? Tidak. Lakukan saja kueri setelah membaca setiap kumpulan baris dari file.
-
Mulai dari mana? Saat penghitung mencapai ukuran batch, lakukan kueri. Kemudian atur penghitung kembali ke
0
dan atur string kueri kembali ke nilai awal. Terakhir, di akhir loop, Anda harus melakukan kueri dengan nilai yang tersisa (kecuali ukuran file adalah kelipatan tepat dari ukuran batch, dalam hal ini tidak akan ada yang tersisa).
$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);
}