【问题标题】:PHPSpreadsheet Issue with Excel to MariaDBExcel 到 MariaDB 的 PHPSpreadsheet 问题
【发布时间】:2023-03-10 05:40:02
【问题描述】:

我想将 Excel 模板中的单元格中的数据上传到我的 mariadb 灯堆栈。 我正在使用 PHPSpreadsheet 读取单元格。我在库语法方面遇到了一些问题。服务器连接/数据库连接工作正常,我可以通过寻址文件的特定路径将一些数据插入到我的表中。但我想为此使用输入类型文件。

感谢任何帮助和想法

我的代码:

<?php
session_start();

require_once "db_connect.php";
require 'PhpSpreadsheet/vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Reader\Ods\BaseReader;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx;

if ($_FILES["file"]["name"] != '') {
    $allowed_extension = array('xls', 'xlsx');
    $file_array = explode(".", $_FILES['file']['name']);
    $file_extension = end($file_array);
    if (in_array($file_extension, $allowed_extension)) {

        $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('xlsx');
        $spreadsheet = $reader->load($_FILES['file']['name']);
        $data[1] = $spreadsheet->getActiveSheet()->getCell('K10')->getcalculatedValue();
        $data[2] = $spreadsheet->getActiveSheet()->getCell('K4')->getcalculatedValue();
        $data[3] = $spreadsheet->getActiveSheet()->getCell('K5')->getcalculatedValue();
        $data[4] = $spreadsheet->getActiveSheet()->getCell('K6')->getcalculatedValue();
        $data[5] = $spreadsheet->getActiveSheet()->getCell('K7')->getcalculatedValue();
        $data[6] = $spreadsheet->getActiveSheet()->getCell('K8')->getcalculatedValue();
        $data[7] = $spreadsheet->getActiveSheet()->getCell('K9')->getcalculatedValue();
        $data[8] = $spreadsheet->getActiveSheet()->getCell('N9')->getcalculatedValue();
        $data[9] = $spreadsheet->getActiveSheet()->getCell('Y4')->getcalculatedValue();
        $data[10] = $spreadsheet->getActiveSheet()->getCell('U5')->getcalculatedValue();
        $data[11] = $spreadsheet->getActiveSheet()->getCell('AA9')->getcalculatedValue();
        $data[12] = $spreadsheet->getActiveSheet()->getCell('AA10')->getcalculatedValue();
        $data[13] = $spreadsheet->getActiveSheet()->getCell('AA11')->getcalculatedValue();
        $data[14] = "1";
        $data[15] = $spreadsheet->getActiveSheet()->getCell('S7')->getcalculatedValue();
        $data[16] = $spreadsheet->getActiveSheet()->getCell('S8')->getcalculatedValue();
        $data[17] = $spreadsheet->getActiveSheet()->getCell('K15')->getcalculatedValue();
        $data[18] = $spreadsheet->getActiveSheet()->getCell('N15')->getcalculatedValue();
        $data[19] = $spreadsheet->getActiveSheet()->getCell('P15')->getcalculatedValue();
        $data[20] = $spreadsheet->getActiveSheet()->getCell('S15')->getcalculatedValue();
        $data[21] = $spreadsheet->getActiveSheet()->getCell('U15')->getcalculatedValue();
        $data[22] = $spreadsheet->getActiveSheet()->getCell('X15')->getcalculatedValue();
        $data[23] = $spreadsheet->getActiveSheet()->getCell('Z15')->getcalculatedValue();
        $data[24] = $spreadsheet->getActiveSheet()->getCell('AC15')->getcalculatedValue();
        $data[25] = $spreadsheet->getActiveSheet()->getCell('K14')->getcalculatedValue();
        $data[26] = $spreadsheet->getActiveSheet()->getCell('P14')->getcalculatedValue();
        $data[27] = $spreadsheet->getActiveSheet()->getCell('U14')->getcalculatedValue();
        $data[28] = $spreadsheet->getActiveSheet()->getCell('Z14')->getcalculatedValue();

        $sql_insert = "
 INSERT INTO 
          auftrag (...)
  VALUES
      ('$data[1]', '$data[2]', '$data[3]', '$data[4]', '$data[5]', '$data[6]', '$data[7]', '$data[8]', '$data[9]', '$data[10]', '$data[11]', '$data[12]', '$data[13]', '$data[14]', '$data[15]', '$data[16]', '$data[17]', '$data[18]', '$data[19]', '$data[20]', '$data[21]', '$data[22]', '$data[23]', '$data[24]', '$data[25]', '$data[26]', '$data[27]', '$data[28]')
 ";
   
        print_r($data);
        try {
            $stmt = $pdo->prepare($sql_insert);
            $stmt->execute($data);
            echo "OK<br>";
        } catch (Exception $ex) {
            echo $ex->getMessage() . "<br>";
        }
    }
}

header("location:home.php");
?>

【问题讨论】:

  • 要解决此问题,请让您的 php 程序打印_r 您的 $sql_insert 语句,仔细检查它,甚至在 phpmyadmin 或 heidisql 等 SQL 客户端程序中运行它。
  • $sql_insert 已经通过从文件中插入我在 IOFactory::createReader('path');我想我用过 IOFactory::load(...);那里

标签: php mysql excel mariadb phpoffice


【解决方案1】:

您应该从以下位置更改准备好的查询:

$sql_insert = "
 INSERT INTO auftrag (...)
 VALUES ('$data[1]', .... '$data[28]')
 ";

$sql_insert = "INSERT INTO auftrag (
    field1,
    ...
    field28
 ) VALUES (?, .... ?)"; // 28 placeholders

$stmt-&gt;execute($data); 将应用数据而不是占位符并将其插入数据库

【讨论】:

  • 您的意思是 CellValues 的占位符?还是 $data[ n ] 的占位符?
  • $data[x] 的占位符
  • 好的,我会试试的,但是这个行为到底会改变什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-25
  • 2019-04-04
  • 1970-01-01
  • 2018-04-12
  • 2016-04-04
  • 2018-08-03
相关资源
最近更新 更多