Sử dụng vòng lặp for?
Nhưng tùy chọn nhanh nhất để tải dữ liệu vào MySQL là sử dụng TẢI THÔNG TIN DỮ LIỆU , bạn có thể tạo tệp để tải qua PHP và sau đó cung cấp tệp đó vào MySQL thông qua một quy trình khác (hoặc là bước cuối cùng trong quy trình gốc).
Nếu bạn không thể sử dụng tệp, hãy sử dụng cú pháp sau:
insert into table(col1, col2) VALUES (val1,val2), (val3,val4), (val5, val6)
vì vậy bạn giảm tổng số câu cần chạy.
CHỈNH SỬA:Với đoạn mã của bạn, có vẻ như bạn có thể hưởng lợi từ CHÈN ... BẬT CẬP NHẬT KHÓA DUPLICATE cú pháp của MySQL, cho phép cơ sở dữ liệu thực hiện công việc và giảm số lượng truy vấn. Điều này giả sử bảng của bạn có khóa chính hoặc chỉ mục duy nhất.
Để đạt được DB sau mỗi 100 hàng, bạn có thể làm điều gì đó như ( VUI LÒNG XEM LẠI NÓ VÀ SỬA MÔI TRƯỜNG CỦA BẠN )
$insertOrUpdateStatement1 = "INSERT INTO table (col1, col2) VALUES ";
$insertOrUpdateStatement2 = "ON DUPLICATE KEY UPDATE ";
$counter = 0;
$queries = array();
foreach($itemList as $key => $item){
$val1 = escape($item->col1); //escape is a function that will make
//the input safe from SQL injection.
//Depends on how are you accessing the DB
$val2 = escape($item->col2);
$queries[] = $insertOrUpdateStatement1.
"('$val1','$val2')".$insertOrUpdateStatement2.
"col1 = '$val1', col2 = '$val2'";
$counter++;
if ($counter % 100 == 0) {
executeQueries($queries);
$queries = array();
$counter = 0;
}
}
Và executeQueries sẽ lấy mảng và gửi một truy vấn duy nhất:
function executeQueries($queries) {
$data = "";
foreach ($queries as $query) {
$data.=$query.";\n";
}
executeQuery($data);
}