{"id":220,"date":"2021-05-13T16:57:29","date_gmt":"2021-05-13T16:57:29","guid":{"rendered":"https:\/\/sdestudiodigital.com\/?p=220"},"modified":"2021-05-13T16:57:30","modified_gmt":"2021-05-13T16:57:30","slug":"importar-archivos-csv-a-mysql-con-php","status":"publish","type":"post","link":"https:\/\/sdestudiodigital.com\/blog\/importar-archivos-csv-a-mysql-con-php\/","title":{"rendered":"Importar archivos csv a Mysql con php"},"content":{"rendered":"\n

Estamos trabajando en un proyecto para una ONG<\/a>, y la idea era importar archivo csv a mysql con php<\/strong>, toda la programaci\u00f3n estaba echa en php as\u00ed que era la mejor manera de realizarlo.<\/p>\n\n\n\n\n\n\n\n

Compartimos esta informaci\u00f3n por que hay varios tutoriales en la red de como importar archivos csv a mysql con php<\/strong> pero nos daba error, hasta que no encontramos el porque.<\/p>\n\n\n\n

C\u00f3digo para importar archivos csv a mysql con php<\/h2>\n\n\n\n

Tenemos dos formularios, uno que contiene un formulario, y el otro que ejecuta el envi\u00f3 de ese formulario, lo pueden hacer en uno solo, pero para este ejemplo lo realizaremos as\u00ed:<\/p>\n\n\n\n

formulario.php<\/strong><\/p>\n\n\n\n

<form action='cargar.php' method='post' enctype=\"multipart\/form-data\" class=\"form \">
<div class=\"form-group\">
Importar Archivo : <input type='file' name='sel_file' size='20' >
<\/div>
<div class=\"form-group\">
<input name=\"Envio\" type=\"hidden\" id=\"Envio\" value=\"1\" \/>
<button type=\"submit\"  name=\"Grabar\" id=\"Enviar\" value=\"Grabar\"class=\"btn btn-lg btn-primary btn-block\">CARGAR ARCHIVO<\/button>
<\/div>
<\/form><\/code><\/p>\n\n\n\n

y en el cargar.php<\/strong><\/p>\n\n\n\n

if(isset($_POST[‘Grabar’]))
{
\/\/Aqu\u00ed es donde seleccionamos nuestro csv
$fname = $_FILES[‘sel_file’][‘name’];
echo ‘1. Cargando nombre del archivo: ‘.$fname.’ <br>’;
$chk_ext = explode(\u00ab.\u00bb,$fname);<\/p>\n\n\n\n

if(strtolower(end($chk_ext)) == \u00abcsv\u00bb)
{
\/\/si es correcto, entonces damos permisos de lectura para subir
$filename = $_FILES[‘sel_file’][‘tmp_name’];
$nombre_final_archivo=\u00bbcargado.csv\u00bb;
if (move_uploaded_file($_FILES[‘sel_file’][‘tmp_name’],$nombre_final_archivo)){
\/\/unlink(‘base.txt’);
echo \u00abAviso: El archivo ha sido cargado correctamente.<br>\u00bb;
\/\/ numero del error para mostrar el paso
$error_estado=2;
}else{
echo \u00abError: Ocurri\u00f3 alg\u00fan error al subir el fichero. No pudo guardarse. Intentelo de nuevo <br>\u00bb;
}<\/p>\n\n\n\n

echo ‘2. empezando cargue: ‘.$nombre_final_archivo.’ <br>’;<\/p>\n\n\n\n

$sql1 = \u00abLOAD DATA LOCAL INFILE ‘cargado.csv’
REPLACE INTO TABLE tablanombre
FIELDS TERMINATED BY ‘;’
LINES TERMINATED BY ‘\\r\\n’
IGNORE 1 LINES (columna1,columna2,columnan)\u00bb;
$db_host = ‘TU_HOST’;
$db_user = ‘TU_USER’;
$db_pass = ‘TU_PASS’;<\/p>\n\n\n\n

$database = ‘TU_DB’;
$table = ‘TU_TABLA’;
if (!mysql_connect($db_host, $db_user, $db_pass))
die(\u00abNo se pudo establecer conexi\u00f3n a la base de datos\u00bb);
mysql_query($sql) or die(mysql_error());
echo ‘3. cargue completo <br>’;
}
else
{
\/\/si aparece esto es posible que el archivo no tenga el formato adecuado, inclusive cuando es cvs, revisarlo para \/\/ver si esta separado por \u00bb , \u00ab
echo \u00abArchivo invalido!\u00bb;
}
}<\/p>\n\n\n\n

?><\/p>\n\n\n\n

y listo, con esto se carga el el csv a mysql, f\u00e1cil y r\u00e1pido.<\/p>\n\n\n\n

Posibles errores.<\/h2>\n\n\n\n
  • Como les dec\u00eda hay muchos tutoriales, en varios cargan el archivo csv temporalmente, el truco para que salga correctamente es guardarlo y saber donde esta, nosotros lo hicimos que cargara en la misma ubicaci\u00f3n donde esta el c\u00f3digo php, despues de muchas pruebas y pruebas, nos dimos cuenta que el load data local infile no tomara correctamente el tmp de la ubicaci\u00f3n del archivo, se arreglo todo guardarlo en la misma ubicaci\u00f3n.<\/li>
  • Nosotros lo omitimos en este ejemplo, pero el cliente necesitaba que se eliminara los registros que se cargaron, es decir, que existiera un delete, antes, el cual este seria el c\u00f3digo sql: \u00abDELETE FROM nombredelatabla \u00ab.<\/li>
  • Otro truco que fue vital, fueron las tildes, si que nos hizo sufrir, la cuesti\u00f3n es que el pc donde hacian la tabla csv tenia un excel configurado diferente y al exportarlo si aparec\u00edan las tildes, pero al cargarlo no, el truco es abrir el csv con el note y guardarlo como en codificaci\u00f3n cambiarlo a utb8, y listo, ya con eso si lo pueden leer y cargar con caracteres especiales.<\/li><\/ul>\n\n\n\n

    Suerte con los proyectos.<\/p>\n","protected":false},"excerpt":{"rendered":"

    Estamos trabajando en un proyecto para una ONG, y la idea era importar archivo csv a mysql con php, toda la programaci\u00f3n estaba echa en php as\u00ed que era la mejor manera de realizarlo.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[3],"tags":[14,69,67,68],"acf":[],"views":956,"_links":{"self":[{"href":"https:\/\/sdestudiodigital.com\/wp-json\/wp\/v2\/posts\/220"}],"collection":[{"href":"https:\/\/sdestudiodigital.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sdestudiodigital.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sdestudiodigital.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sdestudiodigital.com\/wp-json\/wp\/v2\/comments?post=220"}],"version-history":[{"count":0,"href":"https:\/\/sdestudiodigital.com\/wp-json\/wp\/v2\/posts\/220\/revisions"}],"wp:attachment":[{"href":"https:\/\/sdestudiodigital.com\/wp-json\/wp\/v2\/media?parent=220"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sdestudiodigital.com\/wp-json\/wp\/v2\/categories?post=220"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sdestudiodigital.com\/wp-json\/wp\/v2\/tags?post=220"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}