php如何快速导入文件,php – 如何将200,000行的巨大CSV文件导入MySQL(异步和快速)?...

感谢所有给出这个问题答案的人.我发现了一个解决方案!

只是想分享它,以防有人需要创建一个PHP脚本,将一个巨大的CSV文件导入MySQL数据库(异步和快速!)我已经用400,000行测试了我的代码,并在几秒钟内完成导入.

我相信它适用于较大的文件,您只需要修改最大上传文件大小.

在此示例中,我将导入包含两列(name,contact_number)的CSV文件到包含相同列的MySQL DB中.

您的CSV文件应如下所示:

Ana,0906123489

约翰,0908989199

彼得,0908298392

所以,这是解决方案.

首先,创建你的表

CREATE TABLE `testdb`.`table_test`

( `id` INT NOT NULL AUTO_INCREMENT ,

`name` VARCHAR(100) NOT NULL ,

`contact_number` VARCHAR(100) NOT NULL ,

PRIMARY KEY (`id`)) ENGINE = InnoDB;

其次,我有4个PHP文件.您所要做的就是将其放入一个文件夹中. PHP文件如下:

的index.php

connect.php

//modify your connections here

$servername = "localhost";

$username = "root";

$password = "";

$dbname = "testDB";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {

die("Connection failed: " . $conn->connect_error);

}

?>

senddata.php

include('connect.php');

$data = $_POST['file'];

$handle = fopen($data, "r");

$test = file_get_contents($data);

if ($handle) {

$counter = 0;

//instead of executing query one by one,

//let us prepare 1 SQL query that will insert all values from the batch

$sql ="INSERT INTO table_test(name,contact_number) VALUES ";

while (($line = fgets($handle)) !== false) {

$sql .= "($line),";

$counter++;

}

$sql = substr($sql, 0, strlen($sql) - 1);

if ($conn->query($sql) === TRUE) {

} else {

}

fclose($handle);

} else {

}

//unlink CSV file once already imported to DB to clear directory

unlink($data);

?>

upload.php的

//Declaration of function that will insert data into database

function senddata(filename){

var file = filename;

$.ajax({

type: "POST",

url: "senddata.php",

data: {file},

async: true,

success: function(html){

$("#result").html(html);

}

})

}

$csv = array();

$batchsize = 1000; //split huge CSV file by 1,000, you can modify this based on your needs

if($_FILES['csv']['error'] == 0){

$name = $_FILES['csv']['name'];

$ext = strtolower(end(explode('.', $_FILES['csv']['name'])));

$tmpName = $_FILES['csv']['tmp_name'];

if($ext === 'csv'){ //check if uploaded file is of CSV format

if(($handle = fopen($tmpName, 'r')) !== FALSE) {

set_time_limit(0);

$row = 0;

while(($data = fgetcsv($handle)) !== FALSE) {

$col_count = count($data);

//splitting of CSV file :

if ($row % $batchsize == 0):

$file = fopen("minpoints$row.csv","w");

endif;

$csv[$row]['col1'] = $data[0];

$csv[$row]['col2'] = $data[1];

$min = $data[0];

$points = $data[1];

$json = "'$min', '$points'";

fwrite($file,$json.PHP_EOL);

//sending the splitted CSV files, batch by batch...

if ($row % $batchsize == 0):

echo "";

endif;

$row++;

}

fclose($file);

fclose($handle);

}

}

else

{

echo "Only CSV files are allowed.";

}

//alert once done.

echo "";

}

?>

而已!您已经拥有一个纯PHP脚本,可以在几秒钟内导入多个行! 🙂(感谢我的合作伙伴,他教过我并告诉我如何使用ajax)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值