使用PHP将大量数据插入MySQL

时间:2013-05-30 08:14:38

标签: php mysql cron

所以我的情况如下。我每24小时通过PHP从某个来源获取数据。现在,在此期间,此数据会发生变化,添加新数据或更新某些数据。现在,当我运行查询以每24小时插入或更新此数据时,查询执行需要很长时间。如果执行时间适中,这不会成为问题,因为我计划将其作为一个cron作业,但现在执行时间太长了。 所以当我获得它时,我正考虑将这些数据从PHP写入CSV文件。然后将此CSV文件与MySQL LOAD DATA函数一起使用,该函数可以非常快速地从文件中插入大量数据。

所以问题是可以从PHP写入CSV文件并以适合LOAD DATA INFILE功能的方式对其进行格式化,我怎样才能每24小时删除该CSV并创建一个新的CSV新插入的数据,以及如何在这个特定的CSV文件中正确使用LOAD DATA INFILE函数?哦,我可以在这一切中完成一个cron工作吗?感谢。

2 个答案:

答案 0 :(得分:0)

由于您可以非常灵活地阅读LOAD DATA语句,因此您可以指定字段,行分隔符和许多其他功能。这将允许您以任何格式制作您想要的csv。LOAD DATA确实是在mysql中插入数据的最快方式。

在php中,您可以非常简单地将数据写入文件,如显示here

在此确实你需要一个将在mysql中加载文件的cron作业,this应该会有所帮助。

答案 1 :(得分:0)

假设您从源接收数据并准备此数组:

$x=array(1=>array('1','2','3','4'), 2=>array('5','6','7','8'));

创建一个这样的csv文件:

    $file=fopen(<DIRECTORY_PATH>."file.csv","w");
    if(!$file){
       //error
    }

    $csv_data="";

    foreach($x as $row){
     foreach($row as $element){
        $csv_data.=$element.", ";
     }
    //remove the last comma
    $csv_data.="\n";

    }

    fwrite($file,$csv_data);

$query="load data infile '".<DIRECTORY_PATH>."file.csv"."' into table your_table";
if(!mysqli->query($query))
 printf("Error: %s\n", $mysqli->error);