使用php在MySQL中导入大型CSV文件

时间:2014-02-16 13:48:49

标签: php mysql csv

我正在尝试在CSV文件中导入60,000或更多行。代码只能导入5000行。有人可以帮帮我吗?

require_once('connection.php');

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 transactions (EntryId_Pk, AccessCode, MobileNumber, TelcoCode, TIN, ORNo, ORAmt, NumOfEntries, ECN, AddedOn) VALUES
                (
                    '".addslashes($data[0])."',
                    '".addslashes($data[1])."',
                    '".addslashes($data[2])."',
                    '".addslashes($data[3])."',
                    '".addslashes($data[4])."',
                    '".addslashes($data[5])."',
                    '".addslashes($data[6])."',
                    '".addslashes($data[7])."',
                    '".addslashes($data[8])."',
                    '".addslashes($data[9])."'
                )
            ");
        }
    } while ($data = fgetcsv($handle,1000,",","'"));

2 个答案:

答案 0 :(得分:4)

您可能想要使用LOAD DATA MySQL语句。这可能非常快,因为您不需要将所有内容都读入PHP-land并让MySQL对分配有所了解。你可以在PHP中使用类似的东西:

// dont use mysql_* anymore in new code
mysqli_query($dblink, '
    LOAD DATA LOCAL INFILE "'.$file.'"
        INTO TABLE transactions
        FIELDS TERMINATED by ","
        OPTIONALLY ENCLOSED BY "\'"
        LINES TERMINATED BY "\n"
');

答案 1 :(得分:0)

可能是超时错误。尝试设置

set_time_limit(0);

也可以是以块的形式导入数据并在查询中插入多行而不是逐行执行的好方法。