通过php将csv文件上传到mysql

时间:2012-03-14 06:56:06

标签: php mysql csv

我知道如何将csv文件上传到mysql数据库,但只能通过cmd。我想知道如何使用PHP表格将csv文件上传到mysql数据库,并忽略excel上的一些信息,只会从某一行开始导入。 ?请帮助我。

5 个答案:

答案 0 :(得分:6)

(PHP 4,PHP 5)

fgetcsv

参见php manual http://php.net/manual/en/function.fgetcsv.php

<?php
$row = 1;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        echo "<p> $num fields in line $row: <br /></p>\n";
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo $data[$c] . "<br />\n";
        }
    }
    fclose($handle);
}
?>

答案 1 :(得分:2)

尝试此操作它运行良好,您可以根据CSV文件中的列数添加尽可能多的值。然后在HTML代码中将上传语法放在标记中。

**

$fname = $_FILES['csv_file']['name'];     
$chk_ext = explode(".",$fname);             

        $filename = $_FILES['csv_file']['tmp_     name'];   
$handle = fopen($filename, "r");      
if(!$handle){
die ('Cannot open file for reading');
}      
              while (($data = fgetcsv($handle,     10000, ",")) !== FALSE)
{
          $query = "INSERT INTO tablename       (col1_csv, col2_csv)
values ('$data[0]', '$data[1]');
mysql_query($query) or die(mysql_error    ());
}
 fclose($handle);
?>

**

答案 2 :(得分:1)

您可以使用MySQL LOAD DATA INFILE语句一次批量插入数千条记录。 PHP可以处理文件上传。 PHP代码类似于:

$query = sprintf("
    LOAD DATA LOCAL INFILE '%s'
    INTO TABLE `table1`
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
    LINES TERMINATED BY '\\r\\n'
    IGNORE 1 LINES
    ",
    mysql_real_escape_string($FILES["file1"]["tmp_name"])
);

LOCAL关键字应该允许您解决某些安全限制。更改FIELDS TERMINATED BYLINES TERMINATED BY参数以匹配excel在导出时使用的分隔符。 IGNORE 1 LINES告诉MySQL跳过标题行。

注意:Excel似乎不使用转义字符;但它会(i)将包含,"的字段与"(ii)用""括起来以转义单个"内部数据。我相信MySQL会理解这种编码并正确导入数据。

答案 3 :(得分:0)

您可以将“LOAD DATA INFILE”语句与“IGNORE ... LINES”选项一起使用,您可以从命令行以及PHP中使用该选项。

答案 4 :(得分:0)

试试这个:

 $filename=$_FILES["upload_file"]["name"];
 $extension = end(explode(".",$filename));
 if ($extension=='csv') {
     $tmp_file=$_FILES["upload_file"]["tmp_name"];
     $handle = @fopen($tmp_file, "r");
     //specify your own database connection parameter
     $db = new PDO('mysql:host=localhost;dbname=demo','user','password');
     $stmt = $db->prepare("INSERT INTO writers (writer_name, writer_email) VALUES (?, ?)");
     if ($handle) {
        while (($buffer = fgets($handle, 4096)) !== false) {
            $array=explode(",",$buffer);
            $count=1;
            foreach ($array as $value) {
                $stmt->bindParam($count, $value);
                $count++;
            }
            $stmt->execute();
        }
        if (!feof($handle)) {
            echo "Error: unexpected fgets() fail\n";
        }
        fclose($handle);
        }
        $db = null;
        echo "<p>Success</p>";
    }
    else {
        $error="<p style='color:red;'>Invalid file type</p>";
    }

请参阅http://pradipchitrakar.com.np/programming/upload-csv-mysql-php/