Tengo un pequeño problema tratando de importar datos de un archivo CSV y tengo un par de preguntas que aún no he podido resolver.Importación de datos CSV usando PHP/MySQL
En primer lugar aquí está mi código para ayudar a poner las cosas en perspectiva (arreglado, en un poco, la eliminación de CSS y la conexión DB):
<body>
<div id="container">
<div id="form">
<?php
$deleterecords = "TRUNCATE TABLE tablename"; //empty the table of its current records
mysql_query($deleterecords);
//Upload File
if (isset($_POST['submit'])) {
if (is_uploaded_file($_FILES['filename']['tmp_name'])) {
echo "<h1>" . "File ". $_FILES['filename']['name'] ." uploaded
successfully." . "</h1>";
echo "<h2>Displaying contents:</h2>";
readfile($_FILES['filename']['tmp_name']);
}
//Import uploaded file to Database
$handle = fopen($_FILES['filename']['tmp_name'], "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$import="INSERT into importing(text,number)values('$data[0]','$data[1]')";
mysql_query($import) or die(mysql_error());
}
fclose($handle);
print "Import done";
//view upload form
} else {
print "Upload new csv by browsing to file and clicking on Upload<br />\n";
print "<form enctype='multipart/form-data' action='upload.php' method='post'>";
print "File name to import:<br />\n";
print "<input size='50' type='file' name='filename'><br />\n";
print "<input type='submit' name='submit' value='Upload'></form>";
}
?>
</div>
</div>
</body>
Es básicamente una adaptación de un ejemplo que he encontrado después de muchos muchos intentos en varios métodos.
Mi CSV tiene dos columnas de datos, siendo el primero el texto y la segunda es enteros La tabla en la base de datos también tiene dos columnas, la primera llamada "texto" y el segundo "número"
Así las preguntas que tengo son:
- el texto está cargando sólo está siendo visualizado como 0 en todos los campos y no estoy seguro de por qué
- estoy leyendo de datos que terminan encerrados en "", si eso sucede ¿cómo lo ordenaría?
- ¿cómo puedo ignorar las primeras líneas X del CSV para encabezados, etc.?
- ¿El formato de datos ha cambiado a lo largo de este proceso o está listo para usarlo en un gráfico? p.ej. ¿un decimal permanecería un decimal una vez colocado en la base de datos?
Creo que cubre todo, gracias de antemano por cualquier ayuda!
EDIT:
acaba de hacer una prueba de carga de 10.000 registros y tiene el error:
"Fatal error: El tiempo máximo de ejecución de 30 segundos superó"
alguna idea?
Si va a cargar un archivo grande, también echar un vistazo a [carga de datos INFILE] (http://dev.mysql.com/doc/refman/5.1/en/load-data.html) como es MUCHO más rápido. 'LOAD DATA INFILE '/tmp/test.txt' EN TABLA prueba IGNORAR 1 LÍNEAS;' – Fluffeh
@Fluffeh He intentado usar ese método, pero por alguna razón no funcionaría cuando lo incorporé a PHP. La velocidad definitivamente sería útil ya que será un archivo grande al final. – Pidge
verifique mi respuesta actualizada. – jit