titov_andrei
@titov_andrei
All my life I learn - and die a fool!

Как правильно перевести CSV в SQL на PHP?

Нужна помощь по коду в файле конвертации CSV в SQL -
<?php

namespace TaskForce;

use Exceptions\TaskForceException;

class CSVToSQLConverter
{
    public $CSVFileObject;

    public function createSQLFromCSV($file, $directory): void
    {
        if (!file_exists($file)) {
            throw new TaskForceException('Файл не существует');
        }

        if (!file_exists($directory)  && !mkdir($directory)) {
            throw new TaskForceException('Не удалось создать дуректорию');
            mkdir($directory);
        }

        try {
            $this->CSVFileObject = new \SplFileObject($file, 'r');
        } catch (TaskForceException $exception) {
            throw new TaskForceException('Не удалось открыть файл на чтение');
        }

        $this->CSVFileObject->setFlags(\SplFileObject::DROP_NEW_LINE | \SplFileObject::READ_AHEAD | \SplFileObject::SKIP_EMPTY | \SplFileObject::READ_CSV);

        $headerData = implode(', ', $this->getHeaderData());

        $values[] =
            sprintf(
                "\t(%s)",
                implode(', ', array_map(function ($item) {
                    return "'{$item}'";
                }, $this->CSVFileObject->fgetcsv(',')))
            );

        // var_dump($values);

        $newFile = basename($file, '.csv');

        try {
            $SQLFileObject = new \SplFileObject("$directory/$newFile.sql", 'w');
        } catch (TaskForceException $exception) {
            throw new TaskForceException('Не удалось создать или записать в файл');
        }

        $SQLFileObject->fwrite("INSERT INTO $newFile ($headerData) VALUES {implode(', ' , $values)};");
    }

    public function getHeaderData(): ?array
    {
        $data = $this->CSVFileObject->fgetcsv();

        return $data;
    }
}

Файл формируется, но не так как ожидается. Думаю, что что то не совсем так в строке
$SQLFileObject->fwrite("INSERT INTO $newFile ($headerData) VALUES {implode(', ' , $values)};");
  • Вопрос задан
  • 85 просмотров
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы