簡體   English   中英

通過php將csv文件上傳到mysql

[英]uploading csv file into mysql through php

我知道如何將csv文件上傳到mysql數據庫,但只能通過cmd。 我想知道如何使用PHP表格將csv文件上傳到mysql數據庫,並忽略excel上的一些信息,只會從某一行開始導入。 請幫助我。

(PHP 4,PHP 5)

fgetcsv

請參閱php手冊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);
}
?>

試試這個它運行良好,您可以根據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);
?>

**

您可以使用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)包含包含的字段,並且" with " (ii)使用""來逃避單個"內部數據。我相信MySQL會理解這種編碼並正確導入數據。

嘗試這個:

 $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/

您可以使用“LOAD DATA INFILE”語句和“IGNORE ... LINES”選項,您可以從命令行以及PHP中使用該選項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM