Crear un archivo CSV desde la tabla MySQL usando php

este código crea un archivo csv. Sin embargo, he evitado imprimir comas en los campos porque se usa como un delímetro (ver la línea 22). Ahora quiero eliminar (devoluciones de carro y nuevas líneas) de los campos. Agregando $ algún contenido. = Str_replace (“\ n”, “”, $ val); en la línea 23 no parece funcionar. ¿algunas ideas?

@chmod($export_csv, 0777); $fe = @fopen($export_csv."/export.csv", "w+"); if($fe){ $somecontent = ""; $fields_count = 0; // print field headers $db->query($sql_view); if($row = $db->fetchAssoc()){ foreach($row as $key => $val){ if($fields_count++ > 0) $somecontent .= ","; $somecontent .= ucfirst($key); } } $somecontent .= "\n"; // print field values $db->query($sql_view); while($row = $db->fetchAssoc()){ $fields_count = 0; foreach($row as $key => $val){ if($fields_count++ > 0) $somecontent .= ","; $somecontent .= str_replace(",", "", $val); $somecontent .= str_replace("\n", "", $val); } $somecontent .= "\n"; } // write some content to the opened file. if (fwrite($fe, $somecontent) == FALSE) echo 'file_writing_error'." (export.csv)"; fclose($fe); } 

¿Dónde está tu $somecontent .= str_replace("\n", "", $val) ? No puedo encontrarlo en tu código.

Puede especificar una matriz como primer parámetro para str_replace como se indica allí . Por lo tanto, reemplazaría cada cadena presente en su matriz con el segundo parámetro.

Por ejemplo, $somecontent .= str_replace(array("\n", "\r"), "", $val);

Use la función fputcsv para escribir los archivos CSV. PHP ya tiene una función para escribir archivos csv.

No necesita manejar el escape, delimite usted mismo todos los que ya se manejaron.

Esto manejará todas estas cosas por ti y te salvará de muchos dolores de cabeza.

Puede hacerlo desde MySql directamente :

 SELECT col1, col2, col3 INTO OUTFILE '/tmp/export.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM test_table; 

puedes probar algo como esto, jugando con personajes ASCII

 $somecontent .= str_replace(CHR(10), " ", $val); $somecontent .= str_replace(CHR(13), " ", $val);