2011-03-28 22 views
10

Voglio leggere il file .csv in PHP e inserire il suo contenuto nel database. Ho scritto il seguente codice:Lettura del file .csv in php

$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); 

Non ho alcun errore ma non mi mostra risultato.

risposta

17

Sto usando parseCSV classe per leggere i dati da file CSV. Può dare più flessibilità nella lettura di file CSV.

+5

Pssst: http://php.net/splfileobject – hakre

+1

pssst quasi un anno dopo ho trovato il tuo [blog] (http://hakre.wordpress.com/2010/07/25/parsing-csv-files-with-php -spl-style /) – HenryW

5

questo non è testato ... ma qualcosa di simile dovrebbe fare il trucco:

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

inutile. Perché non utilizzare 'LOAD DATA' in grado di gestire CSV utilizzando' TERMINATED BY' –

+1

@Gary, 'LOAD DATA' è spesso disabilitato su hosting condiviso a causa della possibile minaccia alla sicurezza. – Charles

+0

@Gary e Charles e io abbiamo intrapreso il suo tentativo –

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

More Details

+0

Sì, questo è anche buono. –

1

Prova questo ....

In PHP è spesso utile per essere in grado di leggere un file CSV e l'accesso è dati. È qui che la funzione fgetcsv() è utile, legge ogni riga di un file CSV e assegna ciascun valore in un ARRAY. È possibile definire il separatore nella funzione e vedere i documenti PHP per fgetcsv() per ulteriori opzioni ed esempi.

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>'; 
0

È possibile provare il seguente codice. Funziona perfettamente per me. Ho un commento per renderlo più comprensibile. Puoi fare riferimento a questo codice.

<?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); 
1

Un rivestimento per analizzare un file CSV in un array utilizzando str_getcsv.

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

per costruire una query di database che consente di importare tutti i valori nella base di dati in una sola volta:

$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)); 

Questo creerà una dichiarazione preparata con i segnaposto punto interrogativo, come:

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

e la variabile $values sarà una matrice monodimensionale che contiene i valori per la dichiarazione. Un avvertimento qui è che il file CSV dovrebbe contenere meno di 65.536 voci (numero massimo di segnaposto).

1

Un rivestimento per analizzare un file CSV in un array

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