sql >> Database teknologi >  >> RDS >> Mysql

Hvordan parser man stor CSV-fil uden timeout?

Du kunne gøre noget som dette:

<?php

namespace database;

class importcsv
{
    private $crud;

    public function __construct($dbh, $table)
    {
        $this->crud = new \database\crud($dbh, $table);
        return $this;
    }

    public function import($columnNames, $csv, $seperator)
    {
        $lines = explode("\n", $csv);

        foreach($lines as $line)
        {
            \set_time_limit(30);
            $line = explode($seperator, $line);

            $data = new \stdClass();

            foreach($line as $i => $item) 
            {
                if(isset($columnNames[$i])&&!empty($columnNames[$i]))
                    $data->$columnNames[$i] = $item;
            }

            @$x++;

            $this->crud->create($data);
        }

        return $x;
    }

    public function importFile($columnNames, $csvPath, $seperator)
    {
        if(file_exists($csvPath))
        {
            $content = file_get_contents($csvPath);
            return $this->import($columnNames, $content, $seperator);
        }
        else
        {
            // Error
        }
    }
}

TL;DR:\set_time_limit(30); hver gang du går gennem en linje, kan det løse dine timeout-problemer.



  1. Vælg rækker fra MySQL-tabellen, hvor PHP-tidsstemplet er ældre end X

  2. bestil efter newid() - hvordan virker det?

  3. TEXT-felt, der er kompatibelt i mysql og hsqldb

  4. hvordan man får modsatte resultater fra en forespørgsel Laravel