开发者

PHP: How can I get the contents of a CSV file into a MySQL database row by row?

开发者 https://www.devze.com 2023-02-13 13:01 出处:网络
How can I get the contents of a CSV file into a MySQL database row by row? Ive tried a few methods but can never get more than one row returned, using fgetcsv. One method I\'ve tried that seemed to co

How can I get the contents of a CSV file into a MySQL database row by row? Ive tried a few methods but can never get more than one row returned, using fgetcsv. One method I've tried that seemed to come so close to working:

    $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 ope开发者_JAVA百科ning 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);

only enters one row, but if I print_r $data it returns all the rows. How do I get it to insert all th rows?

Another method:

    $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')";
    }

This almost works too, but there is text within the csv that also contains new lines, so I dont know howto split the actual rows and not the new lines in the text as well.??


this function return an array from csv file

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;
}

// this will return an array // make some logic to read the array and save it

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

                  // $value is a row of adata 

              }
          }


I think this is what you are looking for.

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

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

Make sure that you new line separator is ";" or give the correct one to fgetcsv(). Regards.

0

精彩评论

暂无评论...
验证码 换一张
取 消