[英]How do I import CSV to mysql using codeigniter
我有一個 csv 文件列表,我想使用 codeigniter 將其導入 mysql db。
我試過$this->load->library('getcsv');
庫,但是如何在不將 CSV 文件上傳到服務器的情況下導入 csv,我的意思只是將文件上傳到臨時位置,就像純編碼 PHP 所做的那樣。
任何想法?
例子:
我想要這樣的東西。
HTML: <input type="file" name="csv" />
到一個臨時字符串
Codeigniter: $this->input->upload['tmp_name']
我對此給出了確切的答案。 看看我的這個答案來解決你的問題。
這將生成 CSV 格式的報告。
這將告訴您如何讀取和轉儲 csv 文件。
嘗試這個:
數據庫:
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;
導入.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,",","'"));
//
首先更改位於 config 文件夾內的 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.