【问题标题】:Using array_map when importing data from xlsx从 xlsx 导入数据时使用 array_map
【发布时间】:2018-01-05 14:53:23
【问题描述】:

我正在将一些数据从 xls 文件导入到 mysql 表中。

在数据上,我想使用 mysqli_real_escape_string 函数,然后再将其插入到 sql 表中。

我的问题是:在下面的代码中,我应该将带有转义函数的 array_map 放在哪里?

感谢您的帮助。

    if(isset($_POST['submitButton']))
{
    if($_FILES['file']['size'] != 0 )
    {
        if($_FILES["file"]["size"] > 5242880 ) { $error[] = "A fájl mérete maximum 5 MB lehet."; }
        $filename = $_FILES['file']['name'];
        $ext = pathinfo($filename, PATHINFO_EXTENSION);
        if(!array_key_exists($ext, $fajl_types)) { $error[] = "Nem engedélyezett fájl típus."; }

        if(count($error) == 0 )
        {
            $path = "../imports/" . date( "Y-m-d" ) . '-' . rand(1, 9999) . '-' . $_FILES['file']['name'];
            if(move_uploaded_file($_FILES['file']['tmp_name'], $path ))
            {
                $file_name = basename($path);
                $objPHPExcel = PHPExcel_IOFactory::load('../imports/'.$file_name);
                $dataArr = array();
                foreach($objPHPExcel->getWorksheetIterator() as $worksheet) {
                    $worksheetTitle     = $worksheet->getTitle();
                    $highestRow         = $worksheet->getHighestRow(); // e.g. 10
                    $highestColumn      = $worksheet->getHighestColumn(); // e.g 'F'
                    $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);

                    for ($row = 1; $row <= $highestRow; ++ $row) {
                        for ($col = 0; $col < $highestColumnIndex; ++ $col) {
                            $cell = $worksheet->getCellByColumnAndRow($col, $row);
                            $val = $cell->getValue();
                            $dataArr[$row][$col] = $val;
                        }
                    }
                }
                unset($dataArr[1]); // since in our example the first row is the header and not the actual data

                $user_pass = "";
                $user_reg_date = date("Y-m-d-H:i:s");
                $user_last_login = "";
                $user_aktivation = "";
                $user_vevocsoport = (int)0;
                $user_newpass = "";
                $user_imported = (int)1;

                foreach($dataArr as $val) 
                {

                    $sql = "INSERT INTO user 
                    (
                        user_vnev,
                        user_knev
                    )
                    VALUES
                    (
                        '".$val['0']."',
                        '".$val['1']."'
                    )";
                    $import = mysqli_query($kapcs, $sql) or die("IMPORT-ERROR - " . mysqli_error($kapcs));
                    $ok = 1;
                }
            }
            else
            {
                $error[] = "A fájl feltöltése nem sikerült.";
            }
        }
    }
    else
    {
        $error[] = "Nem választott ki fájlt.";
    }
}

【问题讨论】:

  • 在查询中做就行了

标签: php arrays escaping xlsx xls


【解决方案1】:

您可以在构建查询时添加它。像这样,相互关联的转义和构建查询在您的代码中彼此接近。

foreach($dataArr as $val)
{
    $escapedVals = array_map(function($value) use ($kapcs) {
        return mysqli_real_escape_string($kapcs, $value);
    }, array_slice($val, 0, 2));
    $sql = 'INSERT INTO user 
        (
            user_vnev,
            user_knev
        )
        VALUES
        (
        "' . implode ('","', $escapedVals) . '"
        )';
    $import = mysqli_query($kapcs, $sql) or die("IMPORT-ERROR - " . mysqli_error($kapcs));
    $ok = 1;
}

【讨论】:

  • 你好。谢谢,我会尽快尝试。但是我该如何测试呢?我应该在每个 excel 列中写什么?
  • @KissTom87 我没有更改您的任何逻辑,我只是​​将mysqli_real_escape_string() 添加到了一个可能的位置。您应该可以使用以前使用过的任何表格。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-26
  • 1970-01-01
  • 1970-01-01
  • 2020-08-22
  • 1970-01-01
相关资源
最近更新 更多