-
Là
fgets()
tốt nhất để sử dụng cho việc này? Đó là một cách tốt để làm điều đó. Một tùy chọn khác là đọc toàn bộ tệp thành một mảng cófile()
, sau đó lặp qua mảng vớiforeach()
. -
Tôi có cần tích hợp lệnh gọi lại không? Không. Chỉ cần thực hiện truy vấn sau khi đọc hàng loạt dòng từ tệp.
-
Bắt đầu từ đâu? Khi bộ đếm đạt đến kích thước lô, hãy thực hiện truy vấn. Sau đó đặt bộ đếm trở lại
0
và đặt chuỗi truy vấn trở lại giá trị ban đầu. Cuối cùng, khi kết thúc vòng lặp, bạn sẽ cần thực hiện truy vấn với các giá trị còn lại (trừ khi kích thước tệp là bội số chính xác của kích thước lô, trong trường hợp đó sẽ không còn bất kỳ giá trị nào).
$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);
}