如何使用codeigniter将csv文件导入mysql

Posted

技术标签:

【中文标题】如何使用codeigniter将csv文件导入mysql【英文标题】:How to import csv file into mysql using codeigniter 【发布时间】:2014-03-05 18:37:31 【问题描述】:

我想使用 codeigniter 将 csv 导入 mysql。 这是我的源代码。

查看

<?php $this->load->view("admin/v_header");?>
<?php $this->load->view("admin/v_top_menu");?>
<?php $this->load->view("admin/v_sidebar");?>

<div class="content">
    <div class="header">
        <h1 class="page-title">Import Data Dosen</h1>
    </div>
    <?php $this->load->view("admin/v_alert_msg");?>

    <form class="form-horizontal" action="<?php echo base_url();?>admin/save_dosen" method="POST" enctype="multipart/form-data">
        <fieldset>
            <legend>Import Data Dosen</legend>
            <div class="control-group">
                <label class="control-label"><b>Pilih File :</b></label>
                <div class="controls">
                    <div class="input-prepend">
                        <span class="add-on"><i class="icon-barcode"></i></span>
                        <input type="file" name="csv_dosen" id="csv_dosen"/>
                    </div>
                </div>
            </div>

            <div class="control-group">
                <div class="controls">
                    <button type="submit" class="btn btn-primary">
                        <i class="icon-ok icon-white"></i>Save
                    </button>
                </div>
            </div>
        </fieldset>
    </form>
</div>
<?php $this->load->view("admin/v_footer");?>

图书馆

<?php

error_reporting(0);

    class Csv_impot 

        var $csvfile, $delimitatore, $nometable;
        var $_FIELD;

        function csv_import($cf = "", $del = "", $nt = "") 
            $this->csvfile = $cf;
            $this->delimitatore = $del;
            $this->nometable = $nt;
        

        function export() 
            $csvhandle = file($this->csvfile);
            $field = explode($this->delimitatore, $csvhandle[0]);
            $kolom = "";
            foreach ($field as $array_kolom) 
                $kolom.="`" . trim($array_kolom) . "`,";
            
            $kolom = trim(substr($kolom, 0, -1));
            //echo $kolom;
            for ($i = 1; $i <= count($csvhandle); $i++) 
                $valori = explode($this->delimitatore, $csvhandle[$i]);
                $values = "";
                foreach ($valori as $val) 
                    $val = trim($val);
                    if (eregi("NULL", $val) == 0)
                        $values.="'" . addslashes($val) . "',";
                    else
                        $values.="NULL,";
                
                $values = trim(substr($values, 0, -1));
                $query = "INSERT INTO " . $this->nometable . "(" . $kolom . ") values(" . trim($values) . ");";
                $QUERY[$i] = $query;
            
            return $QUERY;
        

    

控制器

function import_dosen()
    
        $this->data['title']="Import Data Dosen";
        $this->load->view("admin/v_import_dosen",  $this->data);

    
    function save_dosen()
    

        if(isset($_FILES['csv_dosen']['name']))
        
            $csv_dosen=$_FILES['csv_dosen']['name'];
            $handle = fopen($csv_dosen,"r");
            $this->load->library('csv_import');
            $csv=new csv_import(".$handle.",",","dosen");
            $query=$csv->export();
            $this->m_dosen->eksekusi($query);
//            $check_file=  explode(".", $csv_dosen);
//            if(strtolower($check_file[1])=="csv")
//            
//                $csv_dosen=$_FILES['csv_dosen']['temp_name'];
//                $handle = fopen($csv_dosen,"r");
//                while (($data = fgetcsv($handle, 1000,",")) !== FALSE)
//                
//                    echo "haha";
//                
//            
//            elseecho "bukan file csv";
            //$handle = fopen($csv_dosen,"r"); 
            //$csv_dosen_type=$_FILES['csv_dosen']['type'];
            //$csv_dosen_size=$_FILES['csv_dosen']['size'];
        
        //echo $handle;
    

型号

<?php
class M_dosen extends CI_model

    function __contruct()
    
        parent::__construct();
    

    function eksekusi($query)
    
    //echo "<br/>";
    //echo count($query);
        for($i=1;$i<count($query);$i++)
        
            $this->db->query($query[$i]);
            //echo $query[$i];
            //echo "<br/>"
        
    

?>

当我运行此代码时,错误显示 [function.fopen]: failed to open stream: No such file or directory。 我是如何解决这个问题的? 我希望你能帮助解决这个问题。 谢谢。

【问题讨论】:

这是什么".$handle." $handle 是一个变量,用于捕获我的目录中 csv 文件的位置。 这里. .有什么需要? 哦,对不起“.$handle”。必须是 $handle :) 好的。现在它工作了吗? 【参考方案1】:

根据您的库,您必须将文件名传递给您的 Csv_impot 构造函数。但是您正在传递文件处理程序。

所以改变你的代码如下。

//general oops method:
$csv=new csv_import($csv_dosen,",","dosen");

//In CI,
 $this->load->library('csv_import',array($csv_dosen,",","dosen")); // no need to create object again. Array of values will be parameter for constructor.

【讨论】:

一个错误显示不存在的类:Csv_import

以上是关于如何使用codeigniter将csv文件导入mysql的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 codeigniter 导入 CSV 文件并将数据插入到多个表中?

在 Codeigniter 中上传 CSV 文件时出错

将 .csv 文件导入 Datagrip?

从 CSV 文件导入包含逗号的变量

从 CSV 提供错误的数组关联以导入 mysql

将csv上传到Codeigniter