如何使用PHP将large.csv加载到mysql表中

如何使用PHP将large.csv加载到mysql表中,php,mysql,Php,Mysql,我是PHP新手 我正在尝试将一个大的14MB.csv加载到mysql表中。 但它并没有完全上传到数据库中,可能是因为文件太大(约400000行)。错误页花了太长时间才响应 有没有更快的办法 亚马逊RDS上的我的数据库,EC2上的PHP 我现在的代码是 <?php header('Access-Control-Allow-Origin: *'); require "../config.php"; //$user_id = $_REQUEST['user_id']; //

我是PHP新手 我正在尝试将一个大的14MB.csv加载到mysql表中。 但它并没有完全上传到数据库中,可能是因为文件太大(约400000行)。错误页花了太长时间才响应

有没有更快的办法

亚马逊RDS上的我的数据库,EC2上的PHP

我现在的代码是

<?php
header('Access-Control-Allow-Origin: *');   

require "../config.php";

//$user_id = $_REQUEST['user_id'];





// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

// path where your CSV file is located
define('CSV_PATH','./');
$csv_file = CSV_PATH . "data_unique.csv";

if (($handle = fopen($csv_file, "r")) !== FALSE) {
   fgetcsv($handle);   
   while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        for ($c=0; $c < $num; $c++) {
          $col[$c] = $data[$c];
        }
        $col1 = $col[0];
        $col2 = $col[1];
        $col3 = $col[2];
        $col4 = $col[3];
        $col5 = $col[4];
        $col6 = $col[5];
        // SQL Query to insert data into DataBase
        $query = "INSERT INTO uniqueid_master(autoid,package_id,unique_id,user_id,issued,book_code) VALUES('".$col1."','".$col2."','".$col3."','".$col4."','".$col5."','".$col6."')";
        $result = $conn->query($query);
    }

    fclose($handle);
}


echo "File data successfully imported to database!!";
$conn->close();
?>

这将改善一些PHP性能变量

ini_set('memory_limit','-1');
ini_set('max_execution_time', 0);
这可能会解决你的问题。但是,仍然有可能出现内存错误。在这种情况下,将csv文件分为多个块,并逐个处理它们。 这是一个很好的处理方法

我认为您应该尝试Mysql语句。这将非常快,因为您不必将所有内容都读入php

mysqli_query($dblink, '
    LOAD DATA LOCAL INFILE "'.$file.'"
        INTO TABLE transactions
        FIELDS TERMINATED by ","
        OPTIONALLY ENCLOSED BY "\'"
        LINES TERMINATED BY "\n"
');
也可以这样写:

$sql = "LOAD DATA LOCAL INFILE '/path/to/file.csv' 
    REPLACE INTO TABLE table_name FIELDS TERMINATED BY ',' 
    ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES";
$result = $mysqli->query($sql);


另一种方法:也参考此方法

请尝试此
ini\u集('max\u execution\u time',-1);ini_集(‘内存限制’,-1)
否则,您已经在php.init文件中设置了它。另外,还可以研究如何使用准备好的语句,以及如何使用insert()插入多行