【问题标题】:How do I import CSV to mysql using codeigniter如何使用 codeigniter 将 CSV 导入 mysql
【发布时间】:2013-04-10 12:34:39
【问题描述】:

我有一个 csv 文件列表,我想使用 codeigniter 将其导入 mysql db。

我尝试了$this->load->library('getcsv'); 库,但是如何在不将 CSV 文件上传到服务器的情况下导入 csv,我的意思是像纯编码 PHP 那样将文件上传到临时位置。

有什么想法吗?

示例:

我想要这样的东西。

HTML:<input type="file" name="csv" />

到一个临时字符串

Codeigniter: $this->input->upload['tmp_name']

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    我给出了准确的答案。看看我的这个答案来解决你的问题。

    这将生成 CSV 格式的报告。

    Reports in Codeigniter

    这将告诉您如何读取和转储 csv 文件。

    Codeigniter REST CSV import to mysql

    【讨论】:

    • 您的解决方案似乎不错,但我如何将 CSV 上传到临时位置等并使用它?
    • 为此,您必须使用文件上传
    【解决方案2】:

    试试这个:

    数据库:

    SET FOREIGN_KEY_CHECKS=0;
    DROP TABLE IF EXISTS `contacts`;
    CREATE TABLE `contacts` (
      `contact_id` int(11) NOT NULL auto_increment,
      `contact_first` varchar(255) character set latin1 default NULL,
      `contact_last` varchar(255) character set latin1 default NULL,
      `contact_email` varchar(255) character set latin1 default NULL,
      PRIMARY KEY  (`contact_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    

    import.php::

    <?php  
    
    //connect to the database 
    $connect = mysql_connect("localhost","username","password"); 
    mysql_select_db("mydatabase",$connect); //select the table 
    // 
    
    if ($_FILES[csv][size] > 0) { 
    
        //get the csv file 
        $file = $_FILES[csv][tmp_name]; 
        $handle = fopen($file,"r"); 
    
        //loop through the csv file and insert into database 
        do { 
            if ($data[0]) { 
                mysql_query("INSERT INTO contacts (contact_first, contact_last, contact_email) VALUES 
                    ( 
                        '".addslashes($data[0])."', 
                        '".addslashes($data[1])."', 
                        '".addslashes($data[2])."' 
                    ) 
                "); 
            } 
        } while ($data = fgetcsv($handle,1000,",","'")); 
        // 
    
        //redirect 
        header('Location: import.php?success=1'); die; 
    
    } 
    
    ?> 
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
    <title>Import a CSV File with PHP & MySQL</title> 
    </head> 
    
    <body> 
    
    <?php if (!empty($_GET[success])) { echo "<b>Your file has been imported.</b><br><br>"; } //generic success notice ?> 
    
    <form action="" method="post" enctype="multipart/form-data" name="form1" id="form1"> 
      Choose your file: <br /> 
      <input name="csv" type="file" id="csv" /> 
      <input type="submit" name="Submit" value="Submit" /> 
    </form> 
    
    </body> 
    </html> 
    
    //get the csv file
        $file = $_FILES[csv][tmp_name];
        $handle = fopen($file,"r");
    
        //loop through the csv file and insert into database
        do {
            if ($data[0]) {
                mysql_query("INSERT INTO contacts_tmp (contact_first, contact_last, contact_email) VALUES
                    (
                        '".addslashes($data[0])."',
                        '".addslashes($data[1])."',
                        '".addslashes($data[2])."'
                    )
                ");
            }
        } while ($data = fgetcsv($handle,1000,",","'"));
        //
    

    【讨论】:

      【解决方案3】:

      首先更改位于配置文件夹中的 route.php 中的 default_controller 值。

      $route['default_controller'] = "csv";

      将控制器创建为 csv.php

      <?php
      class csv extends CI_Controller
      {
          public $data;
          public function __construct()
          {
              parent::__construct();
              $this->load->model('csv_model');
          }
          function index()
          {
              $this->load->view('uploadCsvView',$data);
          }
          function uploadData()
          {
              $this->csv_model->uploadData();
              redirect('csv');
          }
      }
      ?>
      

      并创建一个模型为 csv_model.php

      <?php
      class csv_model extends CI_Model
      {
          function __construct()
          {
              parent::__construct();
          }
          function uploadData()
          {
              $count=0;
              $fp = fopen($_FILES['userfile']['tmp_name'],'r') or die("can't open file");
              while($csv_line = fgetcsv($fp,1024))
              {
                  $count++;
                  if($count == 1)
                  {
                      continue;
                  }//keep this if condition if you want to remove the first row
                  for($i = 0, $j = count($csv_line); $i < $j; $i++)
                  {
                      $insert_csv = array();
                      $insert_csv['id'] = $csv_line[0];//remove if you want to have primary key,
                      $insert_csv['empName'] = $csv_line[1];
                      $insert_csv['empAddress'] = $csv_line[2];
      
                  }
                  $i++;
                  $data = array(
                      'id' => $insert_csv['id'] ,
                      'empName' => $insert_csv['empName'],
                      'empAddress' => $insert_csv['empAddress'],
                  $data['crane_features']=$this->db->insert('tableName', $data);
              }
              fclose($fp) or die("can't close file");
              $data['success']="success";
              return $data;
          }
      }
      

      最后创建一个视图 uploadCsvView.php

      <form action="<?php echo site_url();?>csv/uploadData" method="post" enctype="multipart/form-data" name="form1" id="form1"> 
          <table>
              <tr>
                  <td> Choose your file: </td>
                  <td>
                      <input type="file" class="form-control" name="userfile" id="userfile"  align="center"/>
                  </td>
                  <td>
                      <div class="col-lg-offset-3 col-lg-9">
                          <button type="submit" name="submit" class="btn btn-info">Save</button>
                      </div>
                  </td>
              </tr>
          </table> 
      </form>
      

      并创建要插入数据的mysql表:

      CREATE TABLE tableName(
          id INT,
          empName VARCHAR( 100 ) ,
          empAddress VARCHAR( 100 ),
          PRIMARY KEY (id)
      )
      

      还有最重要的一点:

      MySql 和 Csv 文件应该相同

      示例 csv 数据在以下链接中:

      https://drive.google.com/file/d/0B-OuLrage4PpUmtKNkhuS1JrSkE/view?usp=sharing

      【讨论】:

      • 已经在这里回答link
      猜你喜欢
      • 2014-03-05
      • 2013-10-13
      • 2015-12-10
      • 1970-01-01
      • 1970-01-01
      • 2013-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多