1000 FAQ, 500 tutoriales y vídeos explicativos. ¡Aquí sólo hay soluciones!
Resolver un problema de importación CSV en una tabla MySQL
Esta guía explica cómo resolver un problema de importación de archivos .csv en una tabla MySQL. La alternativa propuesta consiste en leer el archivo CSV línea por línea con PHP e insertar los datos en la base de datos MySQL.
Función "load data local infile" desactivada
La función "LOAD DATA LOCAL INFILE" permite importar un archivo CSV en una tabla MySQL y desafortunadamente es utilizada con frecuencia por los piratas informáticos para obtener acceso a ciertos sitios alojados en máquinas que aceptan esta función.
Para combatir los actos maliciosos y seguir protegiendo en la medida de lo posible los datos de los clientes, Infomaniak ha desactivado la función "LOAD DATA LOCAL INFILE". No están afectadas por este cambio las personas que importan sus archivos CSV (siempre que no marquen "CSV via LOAD DATA") a través de phpMyAdmin.
Aquí hay una alternativa para seguir importando datos en formato CSV en una tabla MySQL, un ejemplo en unas pocas líneas de PHP fáciles de implementar en su script PHP o simplemente en un nuevo archivo PHP en su directorio /web:
// El código anterior se ofrece solo como ejemplo para que comprenda cómo reemplazar esta función. Usted es libre de desarrollar su propio método más eficiente para insertar datos.
$NombreDelArchivo = "datos.csv";
// Abrir el archivo CSV para lectura
$manejador = fopen($NombreDelArchivo, "r");
if ($manejador) {
// Dividir cada línea del archivo CSV
while (($datos = fgetcsv($manejador, 1000, ";", """)) !== FALSE) {
$numero = count($datos)-1;
// Generar la consulta SQL
$consulta = "INSERTAR EN `prueba` VALORES (";
for ($c=0; $c < $numero; $c++) {
$consulta .= "'" . mysql_real_escape_string($datos[$c]) ."',";
}
$consulta .= "'" . mysql_real_escape_string($datos[$numero]) ."')";
// Insertar la línea en la base de datos MySQL
mysql_query($consulta, $conexion) o die (mysql_error());
$consulta = NULL;
}
// Cerrar el archivo CSV
fclose($manejador);
} else {
echo "
Error: No se puede abrir el archivo.
\n";exit(1);
}
?>
Desafortunadamente, es imposible indicarle exactamente dónde en su script deben agregarse estas líneas de código.
⚠️ Para obtener ayuda adicional, póngase en contacto con un socio o complete una oferta — también lea el papel del anfitrión.
Si la alternativa propuesta presenta problemas cuando envía varios archivos CSV para leer y el proceso termina sin devolver un mensaje a pesar de los puntos de procesamiento de mensajes en el archivo PHP, es posible que las tablas y los campos utilizados estén mal indexados. En ese caso, también comuníquese con su webmaster.
Consulte también la documentación de PHP sobre fgetcsv aquí: http://php.net/manual/fr/function.fgetcsv.php