PhpSpreadsheetとMySQL(MariaDB)を使って、アップロードしたエクセルファイルをデータベースに登録したいと思っています。
PhpSpreadsheetとMySQL(MariaDB)を使って、アップロードしたエクセルファイルをデータベースに登録したいと思っています。 現在、下記のコード(PHP)を使ってEXCELファイルのアップロードまではできました。 $filePath = "./files/" . $_FILES["exF_b011u"]["name"]; $filePath = mb_convert_encoding($filePath, "utf8", "AUTO"); if (move_uploaded_file($_FILES["exF_b011u"]["tmp_name"], $filePath)) { chmod($filePath, 0644); // ファイルアップロード成功 } else { header('content-type: text/plain'); die("データベのアップロードに失敗しました。: " . $e->getMessage() . "\n"); } このファイルの全レコードを読み込んで、データベース『tbl_b011u』に登録したいのですが、参考文献をいろいろ読んだのですが分かりませんでした。概ね、ファイルの読込みまでは書いてあっても、データベースへの登録方法までが書いていないことが原因だと思います。 お忙しい中とは思いますが、よろしくお願いいたします。
ベストアンサー
「Excelでないといけない」のでしょうか?CSV形式で保存してからアップロードするというのは論外ですか? Excelに書き込む場合にはどうしようもありませんが、読む方なら「処理しやすい形式」を選択する手もあるかと。 >データベースへの登録方法までが書いていないことが原因だと思います。 insertのSQL文をprepareしておいて、行ごとに値を読みながらexecuteするだけだと思うんですが・・・ $dcols = ['col_a', 'col_b', 'col_c', 'col_d', ]; // テーブルのカラム $xcols = ['A', 'B', 'C', 'D']; // セルの列 $reader = new PhpOffice\PhpSpreadsheet\Reader\Xlsx(); $spreadsheet = $reader->load($file_name); $sheet = $spreadsheet->getSheetByName("シート名"); $lastrow = $sheet->getHighestRow(); $stmt->prepare('insert into テーブル名 (' . implode(', ', $dcols) . ') values (' . implode(', ', array_fill(0, count($dcols), '?')) . ')'); for ($i=1; $i <=$lastrow; $i++) { $data = []; foreach ($xcols as $col) $data[] = $sheet->getCell($col . $i)->getValue(); $stmt->execute($data) }
この返信は削除されました
質問者からのお礼コメント
回答受付が終わってしまったので、改めて続きを投稿します。
お礼日時:7/5 11:49