2011-03-28 18 views
10

Quiero leer el archivo .csv en PHP y poner sus contenidos en la base de datos. Escribí el siguiente código:Lectura del archivo .csv en 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); 

No obtengo ningún error pero no me muestra el resultado.

Respuesta

17

estoy usando parseCSV clase para leer datos de archivos CSV. Puede dar más flexibilidad en la lectura de archivos csv.

+5

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

+1

pssst casi un año después encontré tu [blog] (http://hakre.wordpress.com/2010/07/25/parsing-csv-files-with-php -spl-style /) – HenryW

5

esto no se ha probado ... pero algo como esto debe hacer el truco:

$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

sin sentido. ¿Por qué no utilizar 'LOAD DATA' que puede manejar CSV utilizando' TERMINATED BY' –

+1

@Gary, 'LOAD DATA' a menudo está deshabilitado en el alojamiento compartido debido a la posible amenaza de seguridad. – Charles

+0

@Gary & Charles y yo tomamos su intento –

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í, esto también es bueno. –

1

Prueba esto ....

En PHP a menudo es útil para poder leer un archivo CSV y el acceso es de datos. Ahí es donde la función fgetcsv() es útil, leerá cada línea de un archivo CSV y asignará cada valor en un ARRAY. Puede definir el separador en la función y ver los documentos de PHP para fgetcsv() para más opciones y ejemplos.

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

Puedes probar el siguiente código. Funciona perfecto para mi Tengo un comentario para hacerlo más comprensible. Puede tomar referencia de este código.

<?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 forro para analizar un archivo CSV en una matriz mediante el uso de str_getcsv.

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

para crear una consulta de base de datos que va a importar todos los valores en la base de datos a la vez:

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

Esto construirá una declaración preparada con marcadores de posición signo de interrogación, como:

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

y la variable $values será un conjunto unidimensional que contiene valores para el enunciado. Una advertencia aquí es que el archivo csv debe contener menos de 65.536 entradas (número máximo de marcadores de posición).

1

Un revestimiento para analizar un archivo CSV en una matriz

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