sql >> Databasteknik >  >> RDS >> Mysql

Hur tolkar man stor CSV-fil utan att ta slut?

Du kan göra något så här:

<?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); varje gång du går igenom en linje kan det lösa dina timeoutproblem.



  1. Hur anger jag en unik begränsning för flera kolumner i MySQL?

  2. Anledningar till att inte använda GROUP_CONCAT?

  3. Identitetskolumns värde hoppar plötsligt till 1001 i sql-servern

  4. Två enkolumnsindex vs ett tvåkolumnsindex i MySQL?