使用 Codeigniter 将 CSV 文件中的多行插入到数据库表中

问题描述 投票:0回答:1

我正在尝试获取来自另一个函数的数组中的数据(该函数正在提取 csv 文件中的数据),当我尝试从该数组调用这两个字段时,它显示一个错误,它是 无法识别变量

函数 action() 上显示的

$this->csv_process();
是从 csv 文件中提取数据并将其存储在数组中的函数,自从我尝试在
var_dump();

上检查它以来,该函数是成功的

我还将这两个字段命名为 $name 和 $email ,如下所示:

函数 CSV_process()

public function csv_process()
    {
        /* variables for openning the csv file */                        

            if (!in_array($extension, $allowed_ext)) {
                    $this->session->set_flashdata("message", "Sorry, CSV file only.");            
            } else {
                if ($filesize > 0) {
                $file         = fopen($filename, "r");
                $toWrite     = array();        
                $error         = false;
                $col_size     = 2;
                $skip         = 0;                                
                    while ($data = fgetcsv($file, 10000, ","))
                    {
                        $skip++;
                        if ($skip == 1) {
                            continue;
                        }
                        $numofcol = count($data);
                        if ($numofcol != $col_size ) {
                            $this->session->set_flashdata("message", "Column count exceeded or missing.");
                        } else {
                            $name1         = $data[0];
                            $name         = str_replace("'", "''", $name1);
                            $email1     = $data[1];
                            $email         = str_replace("'", "''", $email1);
                            $toWrite[]    = [
                                        'name'  => $name,
                                        'email' => $email
                            ];    
                        }                        
                    }
                }
            }

            return $toWrite;
    }

函数动作()

function action(){
$toWrite[] = $this->csv_process();
    foreach ($toWrite as $arr) {
        list($name, $email) = $arr;
        //die(var_dump($arr));
        $query = $this->db->query("SELECT * FROM import WHERE name ='$name'  AND email = '$email'");
        if ($query->num_rows() >= 1) {

        } else {
            if ($name == "" OR $email == "") {
            } else {
                if ((filter_var($email, FILTER_VALIDATE_EMAIL)) == FALSE ) {
                } else {
                    $this->db->query("INSERT INTO import(name, email, created_date) VALUES('".$name."', '".$email."', '".date("Y-m-d h-i-s")."')");
                    $this->session->set_flashdata('message', 'SUCCESS YEAY');
                    redirect('Clean_csv/index');
                }
            }
        }
        $query->free_result();
    }
 }

列出数组似乎在这里不起作用,任何人都知道如何从$arr中提取数据数组?

php arrays csv codeigniter batch-insert
1个回答
0
投票

您不需要提取值。您可以在

绑定查询
中使用每个$arr。它简化了选择查询的语法。

要插入,请使用 CodeIgniter 的

insert()
方法。同样,在尝试插入之前,可以通过添加
$arr
来直接使用
date

我认为这会起作用。

function action()
    {
        $toWrite[] = $this->csv_process();
        foreach($toWrite as $arr)
        {
            $query = $this->db->query("SELECT * FROM import WHERE name=?  AND email=?", $arr);
            if($query->num_rows() >= 1)
            {}
            else
            {
                if($arr['name'] == "" OR $arr['email'] == "")
                {}
                else
                {
                    if((filter_var($email, FILTER_VALIDATE_EMAIL)) == FALSE)
                    {}
                    else
                    {
                        $arr['created_date'] = date("Y-m-d h-i-s");
                        $this->db->insert("import", $arr);
                        $this->session->set_flashdata('message', 'SUCCESS YEAY');

                        //??? redirect('Clean_csv/index');  
                        //Are you sure, you may still have more $arr in $toWrite to process - right?
                    }
                }
            }
            $query->free_result();
        }
    }

您需要知道在循环内重复运行数据库查询是多么糟糕的想法。即使您使用

free_result()
,它也可能会大量消耗服务器资源。如果您的 csv 文件有数千个项目,则会给数据库和服务器带来严重压力。

© www.soinside.com 2019 - 2024. All rights reserved.