У меня есть 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);
}