如何用php将csv文件导入MySQL?

时间:2016-09-11 21:12:21

标签: php mysql

有没有办法使用php将csv导入MySQL?

我有一个ImportData.php文件,其中包含以下代码,但不会产生错误消息。 ImportData.phpabc.csv位于Web服务器上的同一文件夹中,而MySQL位于另一台服务器上。

如果LOAD DATA LOCAL INFILE不起作用,还有哪些方法可以导入php?我想用这个任务设置一个cronjob。

$sql = "LOAD DATA LOCAL INFILE 'abc.csv' INTO TABLE tbl_test
FIELDS TERMINATED BY ',' ENCLOSED BY '\"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES";

3 个答案:

答案 0 :(得分:1)

与您的问题相关,我们很乐意为您解决问题:

<强> 1。加载数据信息

一个出色的MySQL功能,允许您在单个查询中直接导入CSV文件。

您正在寻找的SQL命令是LOAD DATA INFILE

此处的手册页:http://dev.mysql.com/doc/refman/5.1/en/load-data.html

快速举例:

    LOAD DATA INFILE 'fileName'
     INTO TABLE tableName
     FIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED BY '"'
     LINES TERMINATED BY '\n'
    (
    field1,
    field2,
    field3,
    @variable1,
    @variable2,
    etc
    )        
    set
    (
    field4 = concat(@variable1,@variable2)
    );

这是一个相当基本的例子,但它涵盖了你想要的大部分内容。手册页提供了如何用它做一些非常复杂的东西的完整细节。

** 2。解析CSV并以编程方式插入**

    set_time_limit(10000);


    $con = new mysqli("example.com", "user", "password", "database");
    if (mysqli_connect_errno()) {
    trigger_error('Database connection failed: '  . mysqli_connect_error(), E_USER_ERROR);} 


    $fp = fopen("file.csv", "r");

    while( !feof($fp) ) {
      if( !$line = fgetcsv($fp, 1000, ';', '"')) {
         continue;
      }

        $importSQL = "INSERT INTO table_name                VALUES('".$line[0]."','".$line[1]."','".$line[2]."')";

        $qry = $con->query(($importSQL) ;

        if($qry === false) {
    trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $con->error, E_USER_ ERROR);
     }  

    }

    fclose($fp);

希望有所帮助。

答案 1 :(得分:0)

有关此LOAD DATA INFILE Syntax

的信息,请参阅MySQL手册
  

LOCAL关键字会影响文件的预期位置和错误处理,如稍后所述。仅当您的服务器和客户端都已配置为允许时,LOCAL才有效。例如,如果mysqld以--local-infile = 0启动,则LOCAL不起作用。请参见第7.1.6节“Security Issues with LOAD DATA LOCAL”。

因此,如果允许,您必须首先检查您的MySQL配置。

替代方法可能是自己解析CSV文件,并使用INSERT INTO语句逐行导入。

答案 2 :(得分:0)

确定。我按照你的代码来解析CSV并以编程方式插入它。有没有办法不导入第一行,因为它是字段标题?

非常感谢你。