web-dev-qa-db-fra.com

Lecture de fichier .csv en php

Je veux lire le fichier .csv dans PHP et mettre son contenu dans la base de données. J'ai écrit le code suivant:

$row = 1;
$file = fopen("qryWebsite.csv", "r");
while (($data = fgetcsv($file, 8000, ",")) !== FALSE) {
    $num = count($data);
    $row++;
    for ($c=0; $c < $num; $c++) {
        echo $data[$c] . "\n";}}
fclose($file);

Je ne reçois aucune erreur mais cela ne montre pas le résultat.

12
Neha Raje

J'utilise parseCSV class pour lire des données à partir de fichiers csv. Cela peut donner plus de flexibilité dans la lecture du fichier csv.

19
Shameer

ce n'est pas testé ... mais quelque chose comme ça devrait faire l'affaire:

$row = 1;
if (($handle = fopen("xxxxxxxxx.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++) {
            $blackpowder = $data;
            $dynamit = implode(";", $blackpowder);
            $pieces = explode(";", $dynamit);
            $col1 = $pieces[0];
            $col2 = $pieces[1];
            $col3 = $pieces[2];
            $col4 = $pieces[3];
            $col5 = $pieces[5];
            mysql_query("
                INSERT INTO `xxxxxx` 
                    (`xxx`,`xxx`,`xxx`,`xxxx`,`xxx`) 
                VALUES 
                    ('".$col1."','".$col2."','".$col3."','".$col4."','".$col5."')
            ");
        }
    }
}
6
Michael Trachsel
$fp = fopen('ReadMe.csv','r') or die("can't open file");
print "<table>\n";
while($csv_line = fgetcsv($fp,1024)) {
    print '<tr>';
    for ($i = 0, $j = count($csv_line); $i < $j; $i++) {
        print '<td>'.$csv_line[$i].'</td>';
    }
    print "</tr>\n";
}
print '</table>';
fclose($fp) or die("can't close file");

Plus de détails

4
Sumith Harshan

Une doublure pour analyser un fichier CSV dans un tableau

$csv = array_map('str_getcsv', file('data.csv'));
1
Jayni

Essaye ça....

Dans PHP, il est souvent utile de pouvoir lire un fichier CSV et d’accéder à ses données. C’est là que la fonction fgetcsv () est pratique: elle lit chaque ligne d’un fichier CSV et attribue chaque valeur à un tableau. Vous pouvez également définir le séparateur dans la fonction. Voir PHP docs for fgetcsv () pour plus d’options et d’exemples.

  function readCSV($csvFile){
        $file_handle = fopen($csvFile, 'r');
        while (!feof($file_handle) ) {
            $line_of_text[] = fgetcsv($file_handle, 1024);
        }
        fclose($file_handle);
        return $line_of_text;
    }


    // Set path to CSV file
    $csvFile = 'test.csv';

    $csv = readCSV($csvFile);
    echo '<pre>';
    print_r($csv);
    echo '</pre>';

Une doublure pour analyser un fichier CSV dans un tableau en utilisantstr_getcsv.

$csv = array_map( 'str_getcsv', file( 'qryWebsite.csv' ) );

Pour créer une requête de base de données qui importera toutes les valeurs dans la base de données à la fois:

$query = 
    "INSERT INTO tbl_name (a,b,c) VALUES " .
    implode( ',', array_map( function( $params ) use ( &$values ) {
        $values = array_merge( (array) $values, $params );
        return '(' . implode( ',', array_fill( 0, count( $params ), '?' ) ) . ')';
    }, $csv ) );

Cela construira une déclaration préparée avec des espaces réservés aux points d’interrogation, tels que:

INSERT INTO tbl_name (a,b,c) VALUES (?,?,?),(?,?,?),(?,?,?),(?,?,?)

, et la variable $values sera un tableau à une dimension qui contient les valeurs de l’instruction. Une mise en garde ici est que le fichier csv doit contenir moins de 65 536 entrées (nombre maximum d'espaces réservés).

1
Danijel

Vous pouvez essayer le code ci-dessous. Cela fonctionne parfaitement pour moi. J'ai un commentaire pour le rendre plus compréhensible. Vous pouvez prendre référence à partir de ce code.

<?php

//display error message if any
ini_set('display_startup_errors',1);
ini_set('display_errors',1);
error_reporting(-1);

//openup connection to database
include('dbconnection.php');

//open csv file
if (($handle = fopen("files/cities.csv", "r")) !== FALSE) {

    $flag = true;
    $id=1;

    //fetch data from each row
    while (($data = fgetcsv($handle, ",")) !== FALSE) {
        if ($flag) {
            $flag = false;
            continue;
        }

        //get data from each column
        $city_id      = $data[0];
        $country_name = $data[1];
        $city_name    = $data[2];
        $state_code   = $data[3];

        //query to insert to database
        $sql = "INSERT IGNORE INTO `DB_Name`.`cities` 
                (`id`,`city_id`, country_name`, `city_name`,`state_code`)
                VALUES 
                ('$id','$city_id','$country_name','$city_name','$state_code')";

        echo $sql;

        //execute the insertion query
        $retval = mysql_query($sql, $conn);

        if($retval == false )
        {
          die('Could not enter data: ' . mysql_error());
        }

        echo "<p style='color: green;'>Entered data having id = " .$id. " successfully</p><br>";
        $id++;
    }

    echo "<br><p style='color: orange;'>Congratulation all data successfully inserted</p>";

    fclose($handle);
}

//close the connection
mysql_close($conn);
0
vijayrana