我在尝试从CSV导入数据时遇到了一些问题,但有一些问题尚未解决。

首先,这是我的代码,可以帮助您更好地了解事物(将其整理一些,删除CSS和DB连接):

<body>
<div id="container">
<div id="form">

<?php
$deleterecords = "TRUNCATE TABLE tablename"; //empty the table of its current records
mysql_query($deleterecords);

//Upload File
if (isset($_POST['submit'])) {

    if (is_uploaded_file($_FILES['filename']['tmp_name'])) {
        echo "<h1>" . "File ". $_FILES['filename']['name'] ." uploaded
 successfully." . "</h1>";
        echo "<h2>Displaying contents:</h2>";
        readfile($_FILES['filename']['tmp_name']);
    }

    //Import uploaded file to Database
    $handle = fopen($_FILES['filename']['tmp_name'], "r");

    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $import="INSERT into importing(text,number)values('$data[0]','$data[1]')";

        mysql_query($import) or die(mysql_error());
    }

    fclose($handle);

    print "Import done";

//view upload form
} else {

    print "Upload new csv by browsing to file and clicking on Upload<br />\n";

    print "<form enctype='multipart/form-data' action='upload.php' method='post'>";

    print "File name to import:<br />\n";

    print "<input size='50' type='file' name='filename'><br />\n";

    print "<input type='submit' name='submit' value='Upload'></form>";

}

?>

</div>
</div>
</body>

从本质上讲,这是我对各种方法进行多次尝试后发现的示例的改编。

我的CSV有两列数据,第一列是文本,第二列是整数
数据库中的表也有两列,第一列称为“文本”,第二列为“数字”

所以我的问题是:
  • 正在上载的文本仅在每个字段中显示为0,我不确定为什么
  • 我一直在阅读有关以“”括起来的数据的信息,如果发生这种情况,我将如何对其进行排序?
  • 如何忽略标题等的CSV的前X行?
  • 是在此过程中更改了数据格式还是准备好在图形中使用?例如一旦放入数据库,小数点会保留小数点吗?

  • 我想涵盖了所有内容,在此先感谢您的帮助!

    编辑:

    刚刚对10,000条记录上传进行了测试,但出现错误:

    “致命错误:超过30秒的最大执行时间”

    有什么想法吗?

    最佳答案

    前几天,我回答了一个几乎相同的问题:Save CSV files into mysql database

    MySQL具有LOAD DATA INFILE功能,该功能允许它直接在单个SQL查询中导入CSV文件,而根本不需要通过PHP程序在循环中对其进行处理。

    简单的例子:

    <?php
    $query = <<<eof
        LOAD DATA INFILE '$fileName'
         INTO TABLE tableName
         FIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED BY '"'
         LINES TERMINATED BY '\n'
        (field1,field2,field3,etc)
    eof;
    
    $db->query($query);
    ?>
    

    就这么简单。

    没有循环,没有大惊小怪。比用PHP解析它要快得多。

    MySQL手册页在这里:http://dev.mysql.com/doc/refman/5.1/en/load-data.html

    希望能有所帮助

    10-04 15:27
    查看更多