как сделать большую пакетную вставку в codeigniter - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь вставить 100000 строк в базу данных. Я использую функцию insert_batch.

Я могу вставить до 80000 строк, но когда я создаю больше, это вызывает ошибку HTTP ERROR 500.

что мне делать? Я новичок в программировании. спасибо.

это мой код;

контроллер

            if ($validation_result) {
                $serial_numbers  = $this->serial_numbers_model->generate_serial_numbers($product_id, $partner_id, $serial_number_quantity, $serial_number_start);

                $issued_date     = date("Y-m-d H:i:s");
                $inserted_rows   = 0;

                foreach ($serial_numbers as $sn) {

                    $check_number = $this->serial_numbers_model->generate_check_number();

                    $first_serial_number = reset($serial_numbers);
                    $last_serial_number = end($serial_numbers);
                    $inserted_rows++;

                    $insert_data[] = array(
                        'partner_id'            => $partner_id,
                        'product_id'            => $product_id,
                        'check_number'          => $check_number,
                        'serial_number'         => $sn,
                        'issued_time'           => $issued_date,
                        'serial_number_status'  => CREATE_STATUS
                    );
                }

                $this->serial_numbers_model->insert_batch($insert_data);

                $all_rows_count  = $this->db->count_all_results('serial_numbers', FALSE);
                $views_data['serial_number_min_max'] = $this->get_serial_number_min_max();
                $views_data['status_counts'] = $this->get_status_counts();
                $views_data['success_msg'] = sprintf('発行完了しました. 合計件数 (%s)  | 発行件数 (%s) => %sから%sまで', $all_rows_count, $inserted_rows, $first_serial_number, $last_serial_number);
            }

модель

public function insert_batch($set_data)
{
    if (!empty($set_data)) {
        $chunk_array = array_chunk($set_data, 1000);

        $this->db->trans_start();
        foreach ($chunk_array as $key => $data) {
            $this->db->insert_batch($this->table, $data);
        }
        $this->db->trans_complete();
    }
}
...