使用php将csv文件导入mysql数据库

Shallow_Criminal

我有一个带有栏的MS-excel文件:地址

还有一个MySQL数据库表,其列为:Add1,Add2,Add3

通过PHP上传MSExcel文件后,是否可以在Excel文件的“地址”列中拆分数据并将其分为Add1,Add2,Add3(每列限制为40个字符)?

我的代码用于在PHP中上传文件:

if(isset($_POST['submit'])) {
 if(isset($_FILES['uploadFile']['name']) && $_FILES['uploadFile']['name'] != "") {
    $allowedExtensions = array("xls","xlsx","csv");
    $ext = pathinfo($_FILES['uploadFile']['name'], PATHINFO_EXTENSION);
    if(in_array($ext, $allowedExtensions)) {
       $file_size = $_FILES['uploadFile']['size'] / 1024;
       if($file_size < 50) {
           $file = "../excelfile/".$_FILES['uploadFile']['name'];
           $isUploaded = copy($_FILES['uploadFile']['tmp_name'], $file);
           if($isUploaded) {

                include("../Classes/PHPExcel/IOFactory.php");
                try {
                    //Load the excel(.xls/.xlsx/.csv) file
                    $objPHPExcel = PHPExcel_IOFactory::load($file);
                } catch (Exception $e) {
                     die('Error loading file "' . pathinfo($file, PATHINFO_BASENAME). '": ' . $e->getMessage());
                }

                //An excel file may contains many sheets, so you have to specify which one you need to read or work with.
                $sheet = $objPHPExcel->getSheet(0);
                //It returns the highest number of rows
                $total_rows = $sheet->getHighestRow();
                //It returns the highest number of columns
                $total_columns = $sheet->getHighestColumn();
                $sheet_data = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);

用于将地址插入表中的查询是:

$query = "insert into address_table (Add1, Add2, Add3)
    values(
    '".$_POST['address1']."',
    '".$_POST['address2']."',
    '".$_POST['address3']."')
邪恶臭鼬

我需要做一些估算,因为我没有您的Excel文件。

想象一下你$sheet_data现在的样子

Array
(
    [0] => Array
        (
            [0] => Street1
        )

    [1] => Array
        (
            [0] => Street2
        )

    [2] => Array
        (
            [0] => Street3 with a long name, more than 40 characters
        )

)

第一级中的每个Array-Element代表一条线-第二级中的每个元素包含相应的列。

foreach ($sheet_data as $line){
    //maybe you need to skip the first line because it could contain just some headers
    //in my estimation $line[0] contains the address
    $address = $line[0];

    //split address after 40 characters
    $split = str_split($address, 40);

    //$conn - mysqli connection
    $stmt = $conn->prepare("INSERT INTO address_table (Add1, Add2, Add3)
    VALUES (?, ?, ?)");

    $addr1=""; $addr2=""; $addr3="";
    if(isset($split[0]) $addr1 = $split[0];
    if(isset($split[1]) $addr2 = $split[1];
    if(isset($split[2]) $addr3 = $split[2];

    //fill query params params with values
    $stmt->bind_param("sss", $addr1, $addr2, $addr3);

    $stmt->execute();
}

对于第三行-表条目将填充为

Add1 => Street3 with a long name, more than 40 c
Add2 => haracters   

您仍然需要检查一件事-如果地址的字符数超过120个,则其他字符会丢失atm。

并且请像我的示例一样使用准备好的语句-当您直接用变量填充查询时,您很容易受到SQL注入的攻击

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用php将txt文件导入mysql数据库

如何使用 PHP 更有效地将 csv 文件导入 MySQL 数据库?

通过PHP将CSV文件导入SQLite数据库

尝试使用phpadmin将csv文件中的数据导入mysql数据库

使用python3将csv文件导入mysql数据库

使用php将csv文件数据插入mysql数据库

使用PHP将CSV文件上传到mysql数据库

将CSV数据导入MySQL数据库中的字段

PHP-将csv导入数据库数据太长

如何将 CSV 文件导入 PostgresSQL 数据库?

将CSV文件导入SQLite数据库

将.csv文件导入SQL Server 2014数据库

导入CSV文件到MySQL数据库

每天从sftp导入.csv文件到MySQL数据库

将CSV记录导入Python中的MySQL数据库

在php中导入mysql数据库时如何使用mysql colomn检查csv列名

使用Python将CSV文件导入sqlite3数据库表

有没有办法使用 Kotlin 将 CSV 文件导入 SQLite 数据库?

使用R将多个csv文件导入到postgresql数据库中(内存错误)

如何通过PHP将Excel文件导入MySQL数据库?

无法使用phpmyadmin向导将csv导入mysql数据库

上传CSV文件并使用Laravel将其导入数据库

使用sqlalchemy将CSV导入数据库

使用Pandas将大型csv导入数据库

使用Perl或Python将日志文件内容导入MySQL数据库

寻找使用 Laravel 处理大型 XML 文件以将部分导入 MySQL 数据库的更好方法

使用PHP将多个文本文件导入数据库表单元格

使用WAMP将sql文件导入数据库

如何使用php在mysql数据库中导入Excel文件?