PHP:如何逐行将CSV文件的内容放入MySQL数据库?

时间:2011-02-27 12:17:37

标签: php mysql csv

如何逐行将CSV文件的内容导入MySQL数据库?我已经尝试了一些方法,但使用fgetcsv永远不会返回多行。我试过的一种方法似乎接近于工作:

    $fileName = $_FILES['SpecialFile']['name'];
    $tmpName = $_FILES['SpecialFile']['tmp_name'];
    $fileSize = $_FILES['SpecialFile']['size'];

    if(!$fileSize) 
    {
        echo "File is empty.\n";
        exit;
    }

    $fileType = $_FILES['SpecialFile']['type'];
    $file = fopen($tmpName, 'r');

    if(!$file) 
    {
        echo "Error opening data file.\n";
        exit;
    }

    while(!feof($file))
    {
        $data = str_replace('"','/"',fgetcsv($file, filesize($tmpName), ","));

        $linemysql = implode("','",$data);

        $query = "INSERT INTO $databasetable VALUES ('$linemysql')";

        return mysql_query($query);

    }

    fclose($file);

只输入一行,但如果我print_r $ data则返回所有行。如何让它插入所有行?

另一种方法:

    $data = str_getcsv($csvcontent,"\r\n","'","");

    foreach($data as &$Row) 
    {
        $linearray = str_getcsv($Row,',',''); //parse the items in rows 

        $linemysql = implode("','",$linearray);

        echo $query = "INSERT INTO $databasetable VALUES ('$linemysql')";
    }

这几乎也有效,但是csv中还有包含新行的文本,所以我不知道如何分割实际的行而不是文本中的新行。??

2 个答案:

答案 0 :(得分:0)

此函数从csv文件返回一个数组

function CSVImport($file) {
    $handle = fopen($file, 'r');
    if (!$handle)
        die('Cannot open  file.');
    $rows = array();
    //Read the file as csv
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {

        $rows[] =  $data

    }

    fclose($handle);

    return $rows;
}

//这将返回一个数组 //制作一些逻辑来读取数组并保存它

$csvArray = CSVImport($tmpName);
        if (count($csvArray)) {
             foreach ($csvArray as $key => $value) {

                  // $value is a row of adata 

              }
          }

答案 1 :(得分:0)

我认为这就是你要找的东西。

function getCSVcontent($filePath) {
    $csv_content = fopen($filePath, 'r');

    while (!feof($csv_content)) {
        $rows[] = fgetcsv($csv_content,1000,";");
    }
    fclose($csv_content);
    return $rows;
}

确保新行分隔符是“;”或者给fgetcsv()一个正确的。问候。