PHP не импортирует все файлы Excel в базу данных MySqli - PullRequest
0 голосов
/ 20 сентября 2019


У меня есть 123 файла Excel, которые содержат информацию, которую я хочу импортировать в мою базу данных MySqli.

Я использую таблицу PHPS для чтения файлов Excel.
Сначала я выбрал количество файлов, которые должны быть импортированы.

$path = "echt/";
$fi = new FilesystemIterator($path , FilesystemIterator::SKIP_DOTS);
$num = iterator_count($fi);

Затем я извлек все имена файлов всех файлов, которые должны быть импортированы.

$filenames = array_diff(scandir($path), array('..', '.'));
$fileSystemIterator = new FilesystemIterator($path);

Затем я сделал цикл foreach через всю переменную $filename.
Таким образом, цикл foreach должен фактически выполнять весь код в цикле для каждого отдельного файла.
Но по какой-то причине из 123 полученных мной файлов в базу данных MySqli импортируется только 87 файлов.
Я точно знаю, что информация, которую я хочу импортировать, находится в одной и той же ячейке в каждом файле Excel, поэтому я могу просто сделать что-то вроде этого: $brand = $spreadsheet['5']['B'], но при этом я выбрал не ту ячейку, так чтобез проблем.
Но он по-прежнему не импортирует все файлы, что необходимо, потому что позже я хочу импортировать файлы 5k + Excel.
Это мой код в цикле foreach():

foreach($filenames as $names) {   
    $inputFileName = "echt/".$names;
    $inputFileType = IOFactory::identify($inputFileName);
    $reader =  new \PhpOffice\PhpSpreadsheet\Reader\Xls();
    $spreadsheet = $reader->load($inputFileName);
    $sheetData = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
    $merk = ($sheetData['5']['B'] !== '' ? trim($sheetData['5']['B']) : '');
    $chassis = ($sheetData['6']['B'] !== '' ? trim($sheetData['6']['B']) : '');
    $kenteken = ($sheetData['5']['F'] !== '' ? trim($sheetData['5']['F']) : '');
    $motornumber = ($sheetData['6']['F'] !== '' ? trim($sheetData['6']['F']) : '');
    $merktype = explode(' ', $merk);
    $cilindernumber = "";
    $eigenaar = "";
    $tel = "";
    // Check if file has already been imported
    $stmtselect = $conn->prepare('SELECT * FROM auto WHERE Kenteken = ?');
    $stmtselect->bind_param('s', $kenteken);
    $stmtselect->execute();
    $stmtselect->store_result();
    if($stmtselect->num_rows > 0) {
        break;
    } else {
        $stmt = $conn->prepare('INSERT INTO auto (Kenteken, Merk, Type, `Aantal Cilinders`,  `Chassis nummer`, `Motor nummer`, Eigenaar, Telefoonnummer) VALUES (?, ?, ?, ?, ?, ?, ?, ?)');
        $stmt->bind_param('sssisssi', $kenteken, $merktype[0], $merktype[1], $cilindernumber, $chassis, $motornumber, $eigenaar, $tel);
        if($stmt->execute()){
            $stmt->close();
            unset($stmt);

        }
    }
}

Кто-нибудь может мне помочь?
С уважением,

EDIT Я выяснил, в чем проблема.
Я импортировал массив, который не всегда имел 2 или более ключей, так чтоне получается ..
Для людей, имеющих ту же проблему:

if(!array_key_exists('1', $merktype)) {
  $val = '';
  array_push($merktype, $val);
}
...