Tengo un código ya hecho que lee un archivo CSV separado por TAB y sube datos a MySQL.
Los datos vienen de un CSV de este link: http://localhost/products.csv
.
Este archivo products.csv por dentro tiene esta forma:
Este es el código:
<?php
# conectare la base de datos
$con = @mysqli_connect("localhost", "root", "", "base");
if(!$con){
die("imposible conectarse: ".mysqli_error($con));
}
if (@mysqli_connect_errno()) {
die("Connect failed: ".mysqli_connect_errno()." : ". mysqli_connect_error());
}
// Leer todo el archivo, eliminando comillas
$tabla = str_replace('"', '', file_get_contents("http://localhost/products.csv"));
// Separar por líneas
$lineas = explode("\n", $tabla);
// Recorrer cada línea
foreach($lineas as $tmp) {
// Eliminar posibles espacios y retorno de carro; separar por tabulador
$datos = explode("\t", trim($tmp));
$modelo = $datos[0];
$nombre = $datos[1];
$descripcion = $datos[2];
// Crear cadena y mostrar en pantalla
$insertar = "insert into tabla (nombre, descripcion, modelo) values ('$nombre','$descripcion','$modelo')";
echo $insertar;
if(mysqli_query($con, $insertar)) {
echo ' - insertado<br>';
} else {
echo ' - Error insertando: ' . mysqli_error($con) . '<br>';
}
}
?>
He impreso en pantalla lo que lee el código y me muestra esto:
Pero en BD me sube esto:
Como se puede ver, hay datos en las 3 columnas MODELO, NOMBRE, DESCRIPCION ocupando algún espacio en Bytes. Se ve, pero si entro está vacío.
Hay una curiosidad, que el primer campo llamado MODELO tiene la inicial del campo modelo que viene del archivo CSV
Las columnas son campos de TEXT, la estructura de la tabla es esta:
Que me falta en el código para que la Base de datos no me suba estos caracteres vacíos ya que en pantalla si se leen los datos y el resultado sea este: